Substituição de string dentro de um loop for no script bat

Substituição de string dentro de um loop for no script bat

A substituição vai bem neste script. Estou tentando torná-lo dinâmico.

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

E este não está funcionando..

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

Posso substituir uma string por uma variável dentro de um loop for? Obrigado :D

Responder1

O problema é a expansão da variável. Se a variável for modificada dentro do forbloco de código, para acessar seu valor dentro do mesmo bloco é necessária uma expansão atrasada.

Mas você não pode fazer algo !lineString:!to_replace!=!como o analisador interpretará a abertura !como to_replacea terminação og lineString.

Então, você tem duas opções.

O mais fácil precisa que esse valor seja substituído para ser conhecido antes do forinício do comando. Basta definir to_replaceantes do forcomando. Quando o analisador atinge o forcomando, a variável tem o valor correto e é expandida adequadamente.

Mas se por algum motivo você tiver que definir o valor da variável dentro do forcomando, você precisará alterar seu código como

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!
)

Isso armazena o valor da variável em um novo forparâmetro substituível que é usado na expressão de substituição

informação relacionada