String-Ersetzung innerhalb einer For-Schleife im Bat-Skript

String-Ersetzung innerhalb einer For-Schleife im Bat-Skript

Das Ersetzen funktioniert in diesem Skript gut. Ich versuche, es dynamisch zu machen.

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

Und dieses funktioniert nicht..

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

Kann ich innerhalb einer For-Schleife einen String durch eine Variable ersetzen? Danke :D

Antwort1

Das Problem ist die Erweiterung der Variablen. Wenn die Variable innerhalb des forCodeblocks geändert wird, ist eine verzögerte Erweiterung erforderlich, um innerhalb desselben Blocks auf ihren Wert zugreifen zu können.

Sie können jedoch nicht so etwas tun, da der Parser die Öffnung in als Beendigung og !lineString:!to_replace!=!interpretiert .!to_replacelineString

Sie haben also zwei Möglichkeiten.

Bei der einfachsten Variante muss der zu ersetzende Wert vor dem forStart des Befehls bekannt sein. Definieren Sie ihn einfach to_replacevor dem forBefehl. Wenn der Parser den Befehl erreicht, forhat die Variable den richtigen Wert und wird ordnungsgemäß erweitert.

Wenn Sie jedoch aus irgendeinem Grund den Wert der Variablen innerhalb des forBefehls definieren müssen, müssen Sie Ihren Code wie folgt ändern:

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

Dadurch wird der Wert in der Variablen in einem neuen forersetzbaren Parameter gespeichert, der im Ersetzungsausdruck verwendet wird.

verwandte Informationen