ファイルから行を読み込んでいるバッチ ファイルからコマンドを呼び出そうとしています。
行にリダイレクト文字が含まれている場合を除いて、これは正しく機能しています>
。
この文字をエスケープする方法call
、または for ループの内容内で置き換える方法はありますか?
私はsetlocal enabledelayedexpansion
and を見てきました(呼び出しが更新されて使用され!
ても、まだ機能しません)。
set /p status=<%tmp_file%
for /f "delims=*" %%a in (%tmp_file%) do (
echo "%%a"
call check.bat "%%a"
echo.
if not "%errorlevel%" == "0" do exit /b 1
)
これにより、次の出力が生成されます(check.bat
エコーの場合%1
)
"a"
"a"
"b -> b"
"b -"
>
内部で置き換えようとしました%%a
が、これをどのように達成できるか完全にはわかりません。試行するたびに、空の文字列が生成されます。
set line=%a:^>=¬%
EDIT 1いくつかの明確化(変数に設定され、その変数が使用される
場合にのみ当てはまるようです)?%1
check.bat
:
set rawinput=%1
set input=%~1
echo %1
echo "%rawinput%"
echo "%input%"
echo.
これにより、次の出力が得られます%1
が、変数に設定すると値が壊れる理由がよくわかりません。
"a"
"a"
""a""
"a"
"b -> b"
"b -> b"
"b -"
興味深いことにb -> b
、出力は 2 回だけで、echo "%rawinput%"
まったく表示されません。echo "%input%"
との両方echo "%rawinput%"
が という名前のファイルに書き込んでいますb
。
これは、check.bat
forを次のb -> b
ように解釈する必要があることを意味します。
echo "b -> b"
echo ""b -> b""
echo "b -> b" REM - this is what 'should' be happening, however does appear to be the case, as it writes '' to a file named b
echo.
echo "b -> b"
バッチファイルで動作していないように見える理由を誰かが明らかにすることができれば、それは大歓迎です。