Reemplazo de cadena dentro de un bucle for en script bat

Reemplazo de cadena dentro de un bucle for en script bat

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 forbloque 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_replacela 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 forcomience el comando. Simplemente defina to_replaceantes del forcomando. Cuando el analizador llega al forcomando, 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 forcomando, 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 forparámetro reemplazable que se utiliza en la expresión de reemplazo.

información relacionada