El reemplazo va bien en este script. Estoy tratando de hacerlo 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
Y este no funciona..
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
¿Puedo reemplazar una cadena con una variable dentro de un bucle for? Gracias :D
Respuesta1
El problema es la expansión de la variable. Si la variable se modifica dentro del for
bloque de código, para acceder a su valor dentro del mismo bloque necesita una expansión retrasada.
Pero no puede hacer algo así, !lineString:!to_replace!=!
ya que el analizador interpretará la apertura !
como to_replace
la terminación og lineString
.
Así que tienes dos opciones.
El más fácil necesita que se reemplace ese valor para que se conozca antes de que for
comience el comando. Simplemente defina to_replace
antes del for
comando. Cuando el analizador llega al for
comando, la variable tiene el valor correcto y está expandida correctamente.
Pero si por alguna razón tiene que definir el valor de la variable dentro del for
comando, necesitará cambiar su 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!
)
Esto almacena el valor de la variable en un nuevo for
parámetro reemplazable que se utiliza en la expresión de reemplazo.