REG ADD REG_SZ onde o valor contém aspas duplas incorporadas (redux)

REG ADD REG_SZ onde o valor contém aspas duplas incorporadas (redux)

Isso está me deixando louco, mas deve ser algo muito simples. Estou tentando modificar um valor ImagePath (REG_SZ) para um script de serviço em lote usando REG ADD, onde os dados do valor contêm "aspas duplas" incorporadas. Mas continuo recebendo um erro de "sintaxe inválida". Este é o valor que estou tentando adicionar:

Key  : HKLM\SYSTEM\CurrentControlSet\Services\myservice
Value: ImagePath REG_SZ
Data : "c:\program files\mydir\old.exe" -helloworld

Estou tentando alterar o ImagePath para:

Data: "c:\program files\mydir\new.exe" -helloworld

No entanto, estou recebendo um erro de sintaxe no comando REG ADD. Este é o script simplificado:

@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
)

Tentei colocar %IPATHNEW%"aspas duplas", 'aspas simples', [colchetes] e barras invertidas, mas continuo recebendo o erro de sintaxe.

Alguma ideia do que estou fazendo de errado?

(Nota - esta é uma substituição desta pergunta: REG ADD REG_SZ onde o valor contém aspas duplas incorporadas)

Responder1

O comando que você está procurando é provavelmente aquele que será substituído "por \":

    set "IPATHNEW=!IPATHNEW:"=^\"!"

O script pode ser assim:

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
)

Eu testei parcialmente e pareceu funcionar.

informação relacionada