バッチファイルでは、通常の処理は上から順番に実行されますが、start コマンドや PowerShell を活用することで、並列(同時)に処理を実行することが可能です。本記事では、バッチファイルで複数の処理を並列に実行する方法を紹介します。
start コマンドを使って並列実行
start コマンドを使用すると、複数の処理を同時に実行できます。
@echo off
start cmd /c "echo 処理1 & timeout /t 5"
start cmd /c "echo 処理2 & timeout /t 5"
start cmd /c "echo 処理3 & timeout /t 5"
このスクリプトでは、3つの処理が並列に実行され、それぞれが独立したコマンドプロンプトで動作します。
ウィンドウを表示せずに並列実行する
ウィンドウを開かずにバックグラウンドで並列実行するには、start コマンドの /b オプションを使用します。
@echo off
start /b cmd /c "echo 処理1 & timeout /t 5"
start /b cmd /c "echo 処理2 & timeout /t 5"
start /b cmd /c "echo 処理3 & timeout /t 5"
これにより、各処理はバックグラウンドで実行され、コマンドプロンプトのウィンドウが開かなくなります。
複数のバッチファイルを並列実行
複数のバッチファイルを同時に実行する場合も、start コマンドを利用できます。
@echo off
start /b batch1.bat
start /b batch2.bat
start /b batch3.bat
これにより、batch1.bat、batch2.bat、batch3.bat が同時に実行されます。
並列処理が終了するまで待機する
並列に実行したプロセスがすべて終了するまで待機したい場合は、start コマンドと waitfor コマンドを組み合わせます。
@echo off
start cmd /c "echo 処理1 & timeout /t 5 & waitfor DoneSignal /t 10"
start cmd /c "echo 処理2 & timeout /t 5 & waitfor DoneSignal /t 10"
start cmd /c "echo 処理3 & timeout /t 5 & waitfor DoneSignal /t 10"
REM すべての処理が完了するまで待機
waitfor DoneSignal /t 10
echo 全ての処理が完了しました
この方法では、すべての処理が終了するまで waitfor により待機します。
PowerShell を利用して並列実行
PowerShell を利用すると、より柔軟に並列処理を実行できます。
@echo off
powershell -Command "& {Start-Job {echo '処理1'; Start-Sleep 5}; Start-Job {echo '処理2'; Start-Sleep 5}; Start-Job {echo '処理3'; Start-Sleep 5}; Get-Job | Wait-Job}"
echo すべての処理が完了しました
PowerShell の Start-Job を使用すると、非同期で処理を実行し、Wait-Job で全ジョブの完了を待つことができます。
まとめ
方法 | 特徴 |
---|---|
start コマンド | 簡単に並列処理を実行できるが、ウィンドウが開く |
start /b コマンド | ウィンドウを開かずに並列処理を実行 |
start + waitfor | 並列処理の終了を待機できる |
PowerShell Start-Job | 柔軟な並列処理が可能 |
用途に応じて最適な方法を選び、バッチファイルの処理を効率的に並列化しましょう。