【初心者向け】PowerShellでバッチファイル(.bat)を実行する方法|基本構文と注意点を解説

プログラミング・IT

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の強力な機能を利用することができます。

コメント

タイトルとURLをコピーしました