多次运行“start cmd /c”时暂停命令运行顺序错误

多次运行“start cmd /c”时暂停命令运行顺序错误

我有一个这样的脚本:

@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
pause

但是,该pause命令在脚本中其上方的所有行都执行之前就执行了。我需要使用,@start /b cmd /c这样它就不必在每次服务(大约 100 次)后等待“正在停止服务...”。有没有办法告诉 cmd 等到所有命令都@start /b cmd /c net stop "Service"完成后再运行暂停?

要了解我在说什么,请运行此批处理文件:

@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
pause

它不是Pause在所有的都Hello打印完之后发生,而是发生在中间:

在此处输入图片描述

答案1

该命令start在其自身上下文中启动应用程序,与您当前控制台正在执行的操作无关,这就是为什么它完成后会返回输出,只要您当前的终端完成正在执行的操作即可。这就是为什么即使您发送了所有这些启动命令,您的暂停也不会等待它们全部完成,它只是等待足够长的时间来启动进程,这就是为什么您的pause出现在它们中间,这只是一个时间问题。

因此,为了解决您的问题,您可以等待它们完成/wait或调用第二个批处理脚本,这样,如果您愿意,您可以等待某些命令而不是其他命令:

等待脚本的技术

@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
pause

使用启动脚本的技术

@echo off
title Laucher

:: This scripts don't need to be waited
start /b cmd /c 'script1.bat'
:: This script needs to be waited
start /wait /b cmd /c 'script2.bat'

脚本1

@echo off
title Script to run without waiting

SomeProcessThatDoesn'tNeedsToBeWaited

脚本2

@echo off
title Script to run to be waited

SomeProcessThatNeedsToBeWaited

干杯

相关内容