【问题标题】:I want to launch 2 .bat files from another .bat file我想从另一个 .bat 文件启动 2 个 .bat 文件
【发布时间】:2023-04-10 02:14:01
【问题描述】:

另一个 Main.bat 文件中的 bat 文件

文件包含以下内容,我希望两者都在延迟 15 秒后启动并一直保持到我用“Ctrl+C”关闭每个文件,请有人帮我解决这个用例。

Main.bat

echo Task-1:
call C:\Users\user\bat\My_bat1.bat

echo Task-2:
call C:\Users\user\bat\My_bat2.bat

My_bat1.bat

start /wait cmd.exe /k "cd PATH && mvn -P dev"

My_bat2.bat

start /wait cmd.exe /k "cd PATH && mvn -Dspring.profiles.active=dev,swagger,no-liquibase -Dspring.cloud.config.profile=dev -DskipTests=true"

【问题讨论】:

  • 哪一部分失败了?
  • @Dan: .bat1 和 .bat2 文件都从 main.bat 文件开始,它们会在 10 秒内关闭,我希望它们一直保留到我按 Ctrl+C 并且第二个应该start 延迟到第一个 15 秒,因为它们都在启动 2 个相互依赖的不同微服务。 +OS 是 Win 10
  • @double-beep: 不,我希望两者同时启动或延迟 15 秒并在两种情况下等待。

标签: batch-file


【解决方案1】:

如果您只是询问如何将批处理文件延迟 15 秒,您可以这样做:

choice /t 15 /D y /n

如果不能,请澄清您的问题?

编辑:根据您的更新,您希望将 pause 添加到您的第一个子 bat 文件中,然后在父 bat 文件中的 call 命令之前添加上面的代码。

【讨论】:

  • 你为什么选择choice而不是pingtimeout
  • @SomethingDark 因为它有效并且我从 DOS 6.22 开始就使用它?没有其他原因。
  • .bat1 和 .bat2 文件都从 main.bat 文件开始,它们会在 10 秒内关闭,我希望它们一直停留到我按 Ctrl+C 后,第二个应该开始 15 秒延迟到第一个,因为他们都启动了 2 个相互依赖的不同微服务。 +OS 是 Win 10
【解决方案2】:

您确实应该编辑您的问题,以包括您希望从 cmets 获得的事件序列,因为这会引起很多混乱。

我会尽量拼凑出你想要的:

  • 启动作业 1,创建新窗口
  • 不要等待作业 1 完成,而是等待 15 秒
  • 启动作业 2,创建新窗口
  • 如果在任一窗口中按 Ctrl+C,它应该会停止作业并关闭窗口
  • 我假设如果一个工作在另一个工作开始之前或之后终止,另一个工作仍然需要开始或继续工作。

首先,当前运行的程序 - 在您的情况下似乎是 maven - 实际上接收 Ctrl+C 并决定它想如何处理它。我不确定它是否按照您想要的方式进行。

Main.bat

echo Task-1:
"%comspec%" /c "C:\Users\user\bat\My_bat1.bat"

timeout 15 /nobreak

echo Task-2:
"%comspec%" /c "C:\Users\user\bat\My_bat2.bat"

我在两次启动之间添加了一个timeout 命令。它等待 15 秒。 如果您删除了/nobreak,也可以通过击键提前启动任务#2 来中断等待

我发现call 在这种情况下有时会引入奇怪的错误,所以我更喜欢"%comspec%" /c。它做同样的事情,只是它不接收在子文件中设置的返回环境变量,这在您的场景中很好。

My_bat1.bat

start "" "%comspec%" /c "cd PATH & mvn -P dev & timeout -1 /nobreak"

我删除了 /wait,它阻止了第二个 mvn 实例的启动,直到第一个实例完成或终止。

我将/k 替换为/c 并添加timeout 来暂停执行而不是/k

timeout -1 /nobreak 语句导致命令解释器无限期地等待而没有机会停止它,Ctrl+C 除外。

如果 mvn 正常退出(如果发生这种情况),您可以删除 /nobreak 以允许通过任何击键关闭它

"%comspec%"cmd.exe 相同,但如果 Microsoft 决定更改命令解释器 exe 名称,则首选。之前需要空 "",因为 start 将第一个双引号字符串解释为窗口名称。

我假设当前文件夹中有一个名为 PATH 的文件夹,因为它不是变量。此外,变量%PATH% 是为可执行文件/库搜索路径列表保留的,除非您真的知道自己在做什么,否则不得为其分配一些随机值或与cd 命令一起使用。见path /?

我还使用& 而不是&& 来防止在mvn 崩溃时关闭窗口。

My_bat2.bat 可以类似地更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2021-06-12
    • 2010-11-09
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多