이 스크립트에서는 교체가 잘 진행됩니다. 역동적으로 만들려고 노력하고 있습니다.
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
그리고 이건 작동하지 않네요..
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
for 루프 내에서 문자열을 변수로 바꿀 수 있나요? 감사합니다 :D
답변1
문제는 변수의 확장이다. 변수가 for
코드 블록 내에서 수정된 경우 동일한 블록 내에서 해당 값에 액세스하려면 지연된 확장이 필요합니다.
!lineString:!to_replace!=!
그러나 파서가 시작을 종료 og로 해석하는 것과 !
같은 to_replace
작업 을 수행할 수는 없습니다 lineString
.
따라서 두 가지 옵션이 있습니다.
가장 쉬운 방법은 명령이 시작되기 전에 해당 값을 바꿔야 한다는 것입니다 for
. 명령 to_replace
앞에 정의하십시오 for
. 파서가 for
명령에 도달하면 변수는 올바른 값을 가지며 적절하게 확장됩니다.
그러나 어떤 이유로든 명령 내에서 변수 값을 정의해야 하는 경우 for
코드를 다음과 같이 변경해야 합니다.
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!
)
이는 변수의 값을 for
교체 표현식에 사용되는 교체 가능한 새 매개변수 에 저장합니다.