3

Batch で特殊文字を含むファイルを読み取って解析するにはどうすればよいですか? test.txt という名前のテキスト ファイルとfoo!!!bar、これを含むバッチ ファイルがあります。

@echo off
setlocal enabledelayedexpansion enableextensions

FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
    echo Unquoted is %%a
    echo Quoted is "%%a"
    set "myVar=%%a"
    echo myVar is still !myVar! or "!myVar!"
)
exit /b 0

foo!!!bar何とか出力したいと思っていますが、これは次のように出力されます。

Unquoted is foobar
Quoted is "foobar"
myVar is still foobar or "foobar"

もちろんできtype test.txtますが、ファイルの各行を処理したいです。

4

1 に答える 1

5

あなたの問題は、バッチパーサーとそのフェーズの副作用です。

FOR パラメータは、遅延展開フェーズが展開される直前に展開されます。
しかし、%%aisの場合、有効な変数展開ではないfoo!!barため、遅延展開によって感嘆符が削除されます。!!

%%aの拡張は遅延拡張が無効になっている場合にのみ安全で あるため、遅延拡張を切り替える必要があります。

@echo off
setlocal DisableDelayedExpansion enableextensions

FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
    echo Unquoted is %%a
    echo Quoted is "%%a"
    set "myVar=%%a"

    setlocal enabledelayedexpansion 
    echo myVar is still !myVar! or "!myVar!"
    endlocal
)

また、CMD.EXE はどのように解析するかを確認することもできます...

于 2012-06-09T22:08:57.977 に答える