Windowsには古くから使われている「バッチファイル(.bat)」がありますが、PowerShellからも簡単に実行可能です。
PowerShellスクリプトと組み合わせることで、より柔軟で自動化された処理ができます。
基本構文:バッチファイルを実行する

PowerShellからバッチファイルを実行するには、主に3つの方法があります:
方法1: Start-Process コマンドレットを使う
Start-Process "C:\path\to\yourfile.bat"
方法2: & 演算子を使う(アンパサンド)
& "C:\path\to\yourfile.bat"
方法3: 直接パスを指定する(Call演算子)
"C:\path\to\yourfile.bat"
または、相対パスも使えます:
.\yourfile.bat
実行例

例1:単純に実行する(Start-Process)
Start-Process "C:\Scripts\run.bat"
例2:コマンドライン引数付きで実行する
# Start-Process での引数の渡し方
Start-Process "C:\Scripts\run.bat" -ArgumentList "arg1", "arg2"
# & 演算子での引数の渡し方
& "C:\Scripts\run.bat" arg1 arg2
例3:バッチファイルを待機してから処理を続ける
Start-Process "C:\Scripts\run.bat" -Wait
-Wait
を使うと、バッチが終了するまでPowerShellスクリプトは停止します。
例4:バッチファイルの出力を取得する
$output = & "C:\Scripts\run.bat"
Write-Host "バッチの出力: $output"
「&」を使ったシンプルな呼び出し
& "C:\Scripts\mybatch.bat"
この書き方は「カレントディレクトリ」にあるバッチを呼び出すときに便利です。
例:
cd "C:\MyScripts"
& ".\install.bat"
注意点:パスにスペースがある場合

& "C:\Program Files\MyTool\run.bat"
スペースが含まれている場合は、必ずクォーテーションで囲んでください。
特に &
を使った方法では "..."
が必須です。
管理者として実行したい場合
バッチを管理者権限で実行したいときは Start-Process
に -Verb RunAs
を付けます:
Start-Process "C:\Scripts\adminTask.bat" -Verb RunAs
ユーザーアカウント制御(UAC)の確認画面が表示されます。
バッチファイルの実行と環境変数

バッチファイルは独自のプロセスで実行されるため、環境変数の扱いに注意が必要です。
PowerShellからバッチファイルに環境変数を渡す
# 環境変数を設定してからバッチを実行
$env:MY_VARIABLE = "Hello from PowerShell"
& "C:\Scripts\use_variable.bat"
バッチファイル(use_variable.bat)の中では次のように使えます:
@echo off
echo 受け取った変数: %MY_VARIABLE%
バッチファイルの出力を変数に格納
$result = & "C:\Scripts\output.bat"
Write-Host "バッチの実行結果: $result"
複数のバッチファイルを順番に実行
# 順番に実行し、それぞれが完了するのを待つ
Start-Process "C:\Scripts\first.bat" -Wait
Start-Process "C:\Scripts\second.bat" -Wait
Write-Host "すべてのバッチファイルが実行完了しました"
エラーハンドリング
バッチファイルの終了コードを取得して、エラー処理を行うことができます:
& "C:\Scripts\mybatch.bat"
if ($LASTEXITCODE -ne 0) {
Write-Host "バッチファイルの実行中にエラーが発生しました。終了コード: $LASTEXITCODE"
} else {
Write-Host "バッチファイルが正常に実行されました"
}
エラー対策:実行ポリシーや拡張子

PowerShellスクリプトの .ps1
と違って、.bat
ファイルの実行には実行ポリシーの制限はありません。
ただし、バッチファイルの中でPowerShellを再呼び出す場合には、powershell.exe
のパスやポリシーが影響することがあります。
バッチファイル内でPowerShellを実行する例
@echo off
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\myscript.ps1"
バッチファイルとPowerShellの使い分け
特性 | バッチファイル (.bat) | PowerShellスクリプト (.ps1) |
---|---|---|
構文 | 古いDOSコマンド | 最新のオブジェクト指向言語 |
機能 | 限定的 | 非常に強力 |
互換性 | 古いシステムにも対応 | 新しいWindows向け |
使いどころ | レガシーシステムとの連携 | 複雑な処理や自動化 |
まとめ:PowerShellからバッチは簡単に実行できる!

実行方法 | 特徴 |
---|---|
Start-Process "xxx.bat" | 標準的な方法。非同期で実行される(終了を待たない) |
Start-Process "xxx.bat" -Wait | 同期実行。バッチ終了まで待機 |
& "xxx.bat" | 軽量・シンプルな呼び出し |
& "xxx.bat" arg1 arg2 | 引数付きで実行 |
-Verb RunAs | 管理者としてバッチを実行したいときに必須 |
よくある質問 (FAQ)
Q: バッチファイルを実行しても何も起きない場合は?
A: バッチファイルのパスが正しいか確認し、まずはコマンドプロンプトから直接実行してみてください。また、バッチファイル内でエラーが発生している可能性もあります。
Q: バッチファイルが長時間実行される場合の処理は?
A: -Wait
パラメータと組み合わせて -Timeout
を指定することで、タイムアウト時間を設定できます:
Start-Process "C:\Scripts\long_task.bat" -Wait -Timeout 300 # 300秒でタイムアウト
Q: バッチファイルの出力をログファイルに保存するには?
A: リダイレクトを使用してログファイルに保存できます:
Start-Process "C:\Scripts\run.bat" -RedirectStandardOutput "log.txt" -RedirectStandardError "error.txt"
PowerShellとバッチファイルの組み合わせは、レガシーシステムとの互換性を保ちながら自動化する強力な方法です。古いスクリプトを活かしつつ、PowerShellの強力な機能を利用することができます。
コメント