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

「&&」の前にスペースを付けてはいけないっていうね。
ちなみにスペースを付けたければ小括弧を使ってブロック化すればいい。メンテナンス性を考えればその方がいいんかな。