「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スクリプト内のその上の行がすべて実行される前に、コマンドが実行されます。各サービス (約 100 回) の後に「サービスを停止しています...」を待たなくて済むようにする必要があります。すべてのコマンドが完了するまで待機してから一時停止を実行する@start /b cmd /cように 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の途中で が表示されますが、これは単なるタイミングの問題です。

したがって、問題を解決するには、2 番目のバッチ スクリプトが終了するまで待つ/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

乾杯

関連情報