2

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

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 ответ1

0

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

Но вы не можете сделать что-то подобное !lineString:!to_replace!=! как парсер будет интерпретировать открытие ! в to_replace в качестве завершения 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 замены, который используется в выражении замены

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .