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 for
Codeblocks 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_replace
lineString
Sie haben also zwei Möglichkeiten.
Bei der einfachsten Variante muss der zu ersetzende Wert vor dem for
Start des Befehls bekannt sein. Definieren Sie ihn einfach to_replace
vor dem for
Befehl. Wenn der Parser den Befehl erreicht, for
hat die Variable den richtigen Wert und wird ordnungsgemäß erweitert.
Wenn Sie jedoch aus irgendeinem Grund den Wert der Variablen innerhalb des for
Befehls 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 for
ersetzbaren Parameter gespeichert, der im Ersetzungsausdruck verwendet wird.