Chaîne de remplacement dans une boucle for en bat script

2

Le remplacement se passe bien dans ce script. J'essaie de le rendre dynamique.

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

Et celui-ci ne fonctionne pas ..

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

Puis-je remplacer une chaîne par une variable dans une boucle for? Merci: D

Jeff Lee
la source

Réponses:

0

Le problème est l'expansion de la variable. Si la variable est modifiée dans le forbloc de code, pour accéder à sa valeur dans le même bloc, vous avez besoin d'une expansion retardée.

Mais vous ne pouvez pas faire quelque chose comme !lineString:!to_replace!=!comme l'analyseur interprétera l'ouverture !en to_replacetant que og de terminaison lineString.

Donc, vous avez deux options.

Le plus simple nécessite que cette valeur soit remplacée pour être connue avant le fordémarrage de la commande. Il suffit de définir to_replaceavant la forcommande. Lorsque l'analyseur atteint la forcommande, la variable a la valeur correcte et est correctement développée.

Mais si pour une raison quelconque vous devez définir la valeur de la variable dans la forcommande, vous devrez modifier votre code de la manière suivante:

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

Ceci stocke la valeur de la variable dans un nouveau forparamètre remplaçable utilisé dans l'expression de remplacement

MC ND
la source