REG ADD REG_SZ, где значение содержит встроенные двойные кавычки (редукс)

REG ADD REG_SZ, где значение содержит встроенные двойные кавычки (редукс)

Это сводит меня с ума, но это должно быть что-то очень простое. Я пытаюсь изменить значение ImagePath (REG_SZ) для службы в пакетном скрипте с помощью REG ADD, где данные значения содержат встроенные «двойные кавычки». Но я продолжаю получать ошибку «Недопустимый синтаксис». Это значение, которое я пытаюсь добавить:

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
)

Я частично протестировал это, и, похоже, это работает.

Связанный контент