Opóźnione zmienne rozszerzenie i wymiana treści

0

Chcę przeanalizować tabelę w pliku tekstowym, zmienić kolejność niektórych kolumn i wprowadzić niewielkie modyfikacje. Używam pętli FOR w pliku BAT procesora poleceń.

echo Header line > outfile.txt

rem get each line from infile.txt but skip first two columns
FOR /f "tokens=3,4*" %%a IN (infile.txt) DO call :handle_line %%a %%b
goto :eof

:handle_line
set a=%1
set b=%2
set b=%b:FOO=BAR%
echo %2 %1 >>outfile.txt
goto :eof

To działa do tej pory, ale jest powolne. Chcę użyć drugiej składni pętli FOR

setlocal enabledelayedexpansion
FOR /f "tokens=3,4*" %%a IN (infile.txt) DO (
    set cA=%%a
    set cB=%%b
    set cB=%cb:FOO=BAR%
    set cBB=!cb:FOO=BAR!

    echo %cB% %cA% %cBB%>>outfile.txt
)

Problem polega na tym, że zawartość FOO nie jest zastępowana przez BAR. Ani z %%ani !!. Jak korzystać z zastępowania treści, kiedy korzystam ze FOR IN DO ()składni?

harfiarka
źródło

Odpowiedzi:

0

The

set cBB=!cb:FOO=BAR!

działa, ale musisz zmienić wszystkie wystąpienia użycia ; szczególnie musisz%variable[:modifier]optional%!…!

echo !cB! !cA! !cBB!
G-Man
źródło