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 for
bloco 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_replace
a 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 for
início do comando. Basta definir to_replace
antes do for
comando. Quando o analisador atinge o for
comando, 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 for
comando, 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 for
parâmetro substituível que é usado na expressão de substituição