【bat】パスにスペースが含まれているとエラーになるときの解決策

Windowsのバッチファイル(.bat)でプログラムやフォルダを扱う際、パスにスペースが含まれていると正しく認識されずエラーになることがあります。
例えば「C:\Program Files」「C:\My Documents」などが典型例です。本記事では、スペースを含むパスを正しく扱うための解決策を解説します。

問題の例

スペースを含むパスをそのまま書くと、途中で区切られて別の引数として解釈されます。

@echo off
rem 誤った例
cd C:\Program Files

実行すると「指定されたパスが見つかりません」と表示されます。これはcdC:\ProgramFilesを別々に扱ってしまうためです。

解決策1:パスを二重引用符で囲む

最も基本的な対処法は、スペースを含むパスを二重引用符(”)で囲むことです。

@echo off
cd "C:\Program Files"
start "" "C:\Program Files\App\app.exe"

startコマンドでは最初の引数が「ウィンドウタイトル」として解釈されるため、空文字""を先頭に置くのが安全です。

解決策2:変数を使う場合も引用符をつける

変数に格納したパスを利用する場合も同様に引用符で囲む必要があります。

@echo off
set APPDIR=C:\Program Files\App

rem 誤り:変数展開時にスペースで分割される
cd %APPDIR%

rem 正しい書き方
cd "%APPDIR%"

解決策3:短縮パス(8.3形式)を使う

古い方法ですが、dir /xで確認できる短縮パス(8.3形式)を利用することでスペースを回避できます。
例えば「C:\Program Files」は「C:\Progra~1」と表記できます。

@echo off
cd C:\Progra~1

ただし環境によって8.3形式が無効化されている場合があるため、推奨は引用符で囲む方法です。

解決策4:forコマンドで安全に扱う

forコマンドを使う場合も、"%変数%"を基本にします。

@echo off
set FILE="C:\My Documents\report.txt"
for %%F in (%FILE%) do (
  echo ファイル名: %%~nxF
)

まとめ

バッチファイルでスペースを含むパスを扱う場合のポイントは次のとおりです。

  • 必ずパスを二重引用符で囲む
  • startコマンドはstart "" "パス"の形で書く
  • 変数展開時も"%VAR%"の形式にする
  • 8.3形式の短縮パスは最後の手段

基本を押さえれば、スペースを含むパスでも安定して扱えるようになります。