DOSのFORを使用したときに入るファイル名末尾の空白
あるディレクトリ下にある拡張子が.cppのファイルを表示するバッチファイルを作った。
ex1.bat
FOR /F %%f IN ('DIR /B /S') DO SET FILE=%%f && SET EXT=%%~xf && CALL :EXECUTE GOTO :EOF :EXECUTE IF "%EXT%"==".cpp" ECHO %FILE% GOTO :EOF
上記のプログラムは一見正しいのだけれど,実は動かないのである。色々デバッグしたところ,どうも%EXT%(そして%FILE%)の末尾に余分なスペースが入っているらしい。なぜスペースが入るのか分からなくて2時間くらいあーだこーだと苦労したのたけど,その甲斐あって原因が判明した。修正したものが次のコードである。
ex2.bat
FOR /F %%f IN ('DIR /B /S') DO SET FILE=%%f&& SET EXT=%%~xf&& CALL :EXECUTE GOTO :EOF :EXECUTE IF "%EXT%"==".cpp" ECHO %FILE% GOTO :EOF
「&&」の前にスペースを付けてはいけないっていうね。
ちなみにスペースを付けたければ小括弧を使ってブロック化すればいい。メンテナンス性を考えればその方がいいんかな。