REG ADD REG_SZ 其中 Value 包含嵌入的雙引號 (redux)

REG ADD REG_SZ 其中 Value 包含嵌入的雙引號 (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%用“雙引號”、“單引號”、[括號] 和 \backslashes\ 括起來,但我不斷收到語法錯誤。

知道我做錯了什麼嗎?

(注意 - 這是這個問題的替代: 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
)

我對其進行了部分測試,它似乎有效。

相關內容