我有一个这样的脚本:
@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
干杯