バッチファイルのエスケープ文字は^だ!!

バッチファイルで長い1行の処理を改行を入れて複数行に分けて書きたいで分割して書くために^のことを書いた。
エスケープ文字の用途は他にもある。

例えば「|」パイプをエスケープしたい場合。
どういうときにパイプをエスケープしたいかというとFOR文でコマンドを実行してその結果を解析したい場合だ。
しょせんは、もどきです。でも書いてる内容だが、
該当のクラスがどのjarファイルの中に入ってるを検索する処理の時にはdirとfindstrを組み合わせる。
この時にエスケープが必要となるのだ。

@echo off
set FIND_STR=%1
FOR /F "eol=; delims=," %%i in ('dir /s/b/a-d^|findstr jar$') DO CALL :GREP_CLASS="%%i"
GOTO :EOF

:GREP_CLASS
REM jar only
REM jar -tvf %1  |findstr %FIND_STR% >nul 2>&1
REM jar and class name
jar -tvf %1  |findstr %FIND_STR% 2>nul
IF {%ERRORLEVEL%}=={0} echo %1
GOTO :EOF

3行目のFOR文のコマンド部分でサブディレクトリからjarを探すのにパイプを使っていて、
そのパイプの前でエスケープしている。
エスケープしないとそこで処理の切れ目になってしまう。
そのため「^」でエスケープする必要がある。

関連あるかもしれない記事