【bat】バッチファイルで並列処理を実行する方法

【bat】バッチファイルで並列処理を実行する方法 bat

バッチファイルでは、通常の処理は上から順番に実行されますが、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 柔軟な並列処理が可能

用途に応じて最適な方法を選び、バッチファイルの処理を効率的に並列化しましょう。