..png)
이것은 나에게 바나나를 몰고 있지만 매우 간단한 것임에 틀림 없습니다. 값 데이터에 "큰따옴표"가 포함되어 있는 REG ADD를 사용하여 배치 스크립트에서 서비스에 대한 ImagePath 값(REG_SZ)을 수정하려고 합니다. 그런데 "잘못된 구문" 오류가 계속 발생합니다. 제가 추가하려는 값은 다음과 같습니다.
Key : HKLM\SYSTEM\CurrentControlSet\Services\myservice
Value: ImagePath REG_SZ
Data : "c:\program files\mydir\old.exe" -helloworld
ImagePath를 다음으로 변경하려고 합니다.
Data: "c:\program files\mydir\new.exe" -helloworld
그러나 REG ADD 명령에서 구문 오류가 발생합니다. 다음은 제거된 스크립트입니다.
@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
for /f "tokens=2*" %%A in ('REG.EXE QUERY "HKLM\SYSTEM\CurrentControlSet\Services\myservice" /v ImagePath') DO set IPATHOLD=%%B
SET IPATHOLD=%IPATHOLD:\0= %
echo OLDPATH^=%IPATHOLD%
set "OLDEXE=old.exe"
set "NEWEXE=new.exe"
for /f "delims=" %%A in ("%IPATHOLD%") do (
set "string=%%A"
set "IPATHNEW=!string:%OLDEXE%=%NEWEXE%!"
)
echo NEWPATH^=%IPATHNEW%
@echo on
@pause
if !IPATHNEW! NEQ !IPATHOLD! (
@echo ready to change
@REM next line results in Syntax Error
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\myservice" /v ImagePath /t REG_SZ /d "%IPATHNEW%" /f
)
"큰따옴표", '작은따옴표', [괄호] 및 \백슬래시\로 묶으려고 했지만 %IPATHNEW%
구문 오류가 계속 발생합니다.
내가 뭘 잘못하고 있는지 아시나요?
(참고 - 이것은 이 질문을 대체합니다. REG ADD REG_SZ 여기서 값에는 큰따옴표가 포함되어 있습니다.)
답변1
찾고 있는 명령은 아마도 다음 "
으로 대체될 명령일 것입니다 \"
.
set "IPATHNEW=!IPATHNEW:"=^\"!"
스크립트는 다음과 같습니다.
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
for /f "tokens=2*" %%A in ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\myservice" /v ImagePath') DO set IPATHOLD=%%B
set "IPATHNEW=!IPATHOLD:old=new!"
set "IPATHNEW=!IPATHNEW:"=^\"!"
echo "%IPATHNEW%"
@pause
if !IPATHNEW! NEQ !IPATHOLD! (
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\myservice" /v ImagePath /t REG_SZ /d "%IPATHNEW%" /f
)
부분적으로 테스트했는데 작동하는 것 같았습니다.