Замена строки внутри цикла for в скрипте bat

Замена строки внутри цикла for в скрипте bat

Замена в этом скрипте идет хорошо. Я пытаюсь сделать его динамичным.

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set lineString=%%a

    set str2=!lineString:C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

А этот не работает..

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set to_replace=C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\
    set lineString=%%a
    set str2=!lineString:%to_replace%=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

Могу ли я заменить строку переменной внутри цикла for? Спасибо :D

решение1

Проблема в расширении переменной. Если переменная изменяется внутри forблока кода, для доступа к ее значению внутри того же блока необходимо отложенное расширение.

Но вы не можете сделать что-то подобное, !lineString:!to_replace!=!так как синтаксический анализатор будет интерпретировать открытие !in to_replaceкак завершение og lineString.

Итак, у вас есть два варианта.

Самый простой из них требует, чтобы это значение было заменено, чтобы быть известным до forначала команды. Просто определите to_replaceперед forкомандой. Когда парсер достигает forкоманды, переменная имеет правильное значение и правильно расширяется.

Но если по какой-либо причине вам необходимо определить значение переменной внутри forкоманды, вам придется изменить свой код следующим образом:

for /f "tokens=* delims= " %%a in ( .... ) do (
    set "lineString=%%a"

    set "to_replace= .... "
    for %%b in ("!to_replace!") do set "str2=!lineString:%%~b=!"

    echo !str2!
)

Это сохраняет значение переменной в новом forзаменяемом параметре, который используется в выражении замены.

Связанный контент