String substituir dentro de um loop for em script de bat

2

A substituição está bem neste script. Estou tentando tornar isso dinâmico.

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript0903111828_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\BuildPatchScript0903111828_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 fazer uma substituição de string com variável dentro de um loop for? Obrigado: D

    
por Jeff Lee 03.09.2014 / 11:09

1 resposta

0

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

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

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

O mais fácil precisa que o valor a ser substituído seja conhecido antes do início do comando for . Apenas defina to_replace antes do comando for . Quando o analisador atingir o comando for , a variável terá o valor correto e será expandida adequadamente.

Mas se por algum motivo você tiver que definir o valor da variável dentro do comando for , 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 na variável em um novo parâmetro for substituível que é usado na expressão de substituição

    
por 05.09.2014 / 13:03