Windows でのバッチ スクリプトでは、開発者は一時停止や待機を導入するさまざまな技術や方法を使用してスクリプトのフローを制御できます。 「一時停止」コマンドと「待機」コマンドは、バッチ ファイルのフローを制御する 2 つの方法です。 「一時停止」コマンドは、「続行するには任意のキーを押してください…」というメッセージを表示しながら、バッチ ファイルの実行を停止します。バッチ ファイルは、ユーザーがキーを押すまで実行できません。バッチ ファイルの実行は、wait 命令で指定された秒数だけ一時停止されます。
バッチファイル一時停止コマンド
バッチ ファイルの「一時停止」コマンドは、コマンド ラインにメッセージを表示している間、バッチ ファイルの実行を停止します。バッチ ファイルは、ユーザーがキーを押すまで実行されません。次回の実行を停止するコマンドが便利です。バッチ ファイルを直接実行して、目的の出力が画面に表示されることを確認すると有益です。
「一時停止」コマンドの構文は次のとおりです。
一時停止
ユーザーに入力を求める
次のバッチ スクリプトの「pause」コマンドは、ユーザーがこのバッチ ファイルを実行すると、「続行するには任意のキーを押してください…」というメッセージを表示します。バッチ ファイルが「dir」コマンドに進む前に、ユーザーはキーを押す必要があります。
@エコーオフ
rem このバッチ ファイルは、ユーザーがキーを押すまで一時停止します。
echo こんにちは。PAUSE コマンドのデモへようこそ。
echo スクリプトの実行は一時停止後も続行されます。
一時停止
rem このバッチ ファイルは次のコマンドに続きます。
エコーありがとうございます!
あなた
ユーザーがキーボードを使用して任意のキーを押すと、このバッチ プロセスが続行されます。
バッチファイル待機コマンド
提供したコードは、メモ帳とペイントの 2 つのプログラムを開くバッチ ファイルです。コードは次のとおりです。
@エコーオフecho 最初のプログラムを開始します。
START /B /WAIT notepad.exe
echo メモ帳がバックグラウンドで正常に開かれました
echo 2 番目のプログラムを開始します。
開始 / 待機 mspaint.exe
echo ペイントが正常に開きました。
cmd /k
最初の行「@echo off」は、バッチ ファイルが実行時にコマンドを表示しないようにします。
ユーザーには、「echo starting First Program」という 2 行目によって、最初のプログラムが起動中であることが単に通知されます。
3 行目の「START /B /WAIT notepad.exe」は、メモ帳プログラムをバックグラウンド ウィンドウで開き、終了するのを待ってから続行します。 「/B」スイッチは、バックグラウンド ウィンドウでプログラムを実行するように START コマンドに指示し、「/WAIT」スイッチは、続行する前にプログラムが終了するまで待機するように START コマンドに指示します。
4 行目は、echo Notepad を読み取ります。メモ帳がバックグラウンドで正常に開かれると、ユーザーにメッセージが通知されるだけです。
5 行目の「echo starting Second Program」は、単に 2 番目のプログラムが開始されていることをユーザーに示すメッセージを表示します。
6 行目の「START /WAIT mspaint.exe」は、ペイント プログラムをバックグラウンド ウィンドウで開き、終了を待たずに続行します。
7 行目の「echo ペイントが正常に開きました」は、ペイントが正常に開かれたというメッセージをユーザーに表示するだけです。
8 行目の「cmd /k」は、新しいコマンド プロンプト ウィンドウを開き、現在のコマンド プロンプト ウィンドウを開いたままにします。
カスタムディレイにループを使用する
バッチプロセスでカスタム遅延のループを使用できます。以下に例を示します。
この例では、このバッチ ファイルが実行されると、最初のメッセージがユーザーに表示されます。 「for」ループが始まると、最初のメッセージがもう一度表示されます。 timeout コマンドは、2 番目のメッセージを表示する前にバッチ ファイルを 1 秒間停止します。合計 10 回の繰り返しの後、最終メッセージが表示されます。
@エコーオフecho ループを使用した遅延のデモ
for /l %%i in (1,1,10) do (
タイムアウト /t 1 /nobreak > null
echo このメッセージは %%i 秒後に表示されます
)
echo このメッセージには 10 秒の遅延が表示されました。
遅延に対するタイムアウトの使用
バッチ ファイルのタイムアウト コマンドは、バッチ ファイルの実行をあらかじめ決められた秒数だけ一時停止します。構文は次のとおりです。
タイムアウト /t「/t」スイッチは待機時間を秒単位で指定します。 「/nobreak」スイッチは、遅延を中断するためにユーザーがキーを押すことを無効にします。
「timeout」コマンドは次の目的で使用できます。
- バッチファイルの実行をあらかじめ決められた期間延期する
- バッチ ファイルのアクションがユーザーによって中断されないようにする
- ユーザーが続行するためにキーを押す必要をなくすことで、よりユーザーフレンドリーなエクスペリエンスを作成します。
たとえば、次のバッチ ファイルは 10 秒間一時停止します。
@エコーオフecho こんにちは、スクリプトの実行は 10 秒の遅延後に続行されます
タイムアウト /t 10
エコーありがとうございます!
次のスクリーンショットに示されているように、タイマーが実行され、ユーザーが任意のキーを押して「タイムアウト」コマンドを中断するのを待機しています。ユーザーがいずれかのキーを押すと、プロセスが停止し、バッチ ファイル内の次のコマンドに進みます。
次のスクリーンショットのユーザーは 5 秒後に「timeout」コマンドを中断し、その結果「Thank you!」が表示されます。メッセージ:
次のスクリーンショットは、「ありがとう!」がどのように表示されるかを示しています。エンドユーザーがタイムアウト命令を中断しなかった場合、メッセージが画面に表示されるまでに 10 秒かかります。
以下は、エンドユーザーによるバッチ ファイル プロセスの中断を停止する no-break スイッチを含むように変更された、更新されたコードです。
@エコーオフrem このバッチ ファイルは 10 秒間一時停止します
echo こんにちは、スクリプトの実行は 10 秒の遅延後に続行されます
タイムアウト /t 10 /nobreak
rem 10 秒後、このコマンドがプロンプト画面に表示されます。
エコーありがとうございます!
前のコードの出力は次のとおりです。
ユーザーが「CTRL+C」コマンドを使用する場合、コマンド ラインはユーザーに Y または N のいずれかを入力するよう求めます。ユーザーが [Y] をクリックすると、このバッチ ジョブが停止します。
「pause」、「wait」、および「timeout」コマンドは、スクリプトのフローを制御する方法です。 「pause」コマンドを使用するとスクリプトの実行が一時停止され、「timeout」コマンドを使用するとスクリプトは所定の時間停止します。
フロー制御のための条件文の使用
条件ステートメントは、特定の状況に基づいてスクリプトのフローを変更するために使用される、最も一般的に実行可能な手法です。条件が true か false に基づいて、「if」ステートメントは 2 つのコード実行のうちの 1 つを実行します。 「if」ステートメントは次のように構成されます。
if <条件>例:
メモ帳または任意のテキスト エディタを開き、inputValue 変数の値を 1 に初期化する次のコードを 3 行目に記述します。次に、実行時に inputValue 変数の値が「if」ステートメントを使用してチェックされ、1、2、または 3 に等しいかどうかが確認されます。等しい場合は、適切なメッセージがコマンド ライン画面に表示されます。そうでない場合は、最終メッセージが表示されます。 「if」として知られる条件文では、変数の inputValue が 1、2、または 3 に等しいかどうかがチェックされます。等しい場合は、2 つのコード ブロックのいずれかが実行されます。条件が true の場合、条件文は何も実行しません。
@エコーオフrem このスクリプトは、変数 inputValue を値 1、2、および 3 に対してテストします。
入力値 = 1 を設定します
if '%inputValue%'=='1' (
echo 入力値は 1 です。
) else if '%inputValue%'=='2' (
echo 入力値は 2 です。
) else if '%inputValue%'=='3' (
echo 入力値は 3 です。
) それ以外 (
echo 変数 inputValue が 1、2、または 3 に等しくありません。
)
出力:
結論
Windows オペレーティング システムでは、コマンド、ループ、「if」などの条件文を使用してスクリプト フローを制御し、プロセスを自動化できます。開発者は、「タイムアウト」または「ping」を利用して、「一時停止」コマンドでスクリプトの実行を停止したり、遅延を追加したりできます。バッチ スクリプトには組み込みの「switch」ステートメントはありませんが、「if」および「else if」式を使用してシミュレートできます。これらのスクリプトが適切なコンテキストで意図したとおりに機能することを確認するには、テストが非常に重要です。これらのスクリプトは、自動化、システム管理、ファイル操作に役立ちます。