バッチファイルのエスケープ文字は^だ!!
バッチファイルで長い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を探すのにパイプを使っていて、
そのパイプの前でエスケープしている。
エスケープしないとそこで処理の切れ目になってしまう。
そのため「^」でエスケープする必要がある。