我想从另一个.bat文件启动2个.bat文件

时间:2018-12-07 20:26:46

标签: batch-file

另一个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"

2 个答案:

答案 0 :(得分:0)

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

choice /t 15 /D y /n

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

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

答案 1 :(得分:0)

您应该真正地编辑问题,以包括您希望从注释中进行的事件顺序,因为这会引起很多混乱。

我将拼凑您想要的东西:

  • 开始工作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崩溃时窗口关闭。

{{1}}可以进行类似的更改。