![多次執行“start cmd /c”時,暫停指令運行亂序](https://rvso.com/image/1592546/%E5%A4%9A%E6%AC%A1%E5%9F%B7%E8%A1%8C%E2%80%9Cstart%20cmd%20%2Fc%E2%80%9D%E6%99%82%EF%BC%8C%E6%9A%AB%E5%81%9C%E6%8C%87%E4%BB%A4%E9%81%8B%E8%A1%8C%E4%BA%82%E5%BA%8F.png)
我有一個這樣的腳本:
@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
乾杯