REG ADD REG_SZ 여기서 값에는 큰따옴표가 포함되어 있습니다(redux).

REG ADD REG_SZ 여기서 값에는 큰따옴표가 포함되어 있습니다(redux).

이것은 나에게 바나나를 몰고 있지만 매우 간단한 것임에 틀림 없습니다. 값 데이터에 "큰따옴표"가 포함되어 있는 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
)

부분적으로 테스트했는데 작동하는 것 같았습니다.

관련 정보