REG ADD REG_SZ donde el valor contiene comillas dobles incrustadas (redux)

REG ADD REG_SZ donde el valor contiene comillas dobles incrustadas (redux)

Esto me está volviendo loco pero debe ser algo muy simple. Estoy intentando modificar un valor de ImagePath (REG_SZ) para un servicio en un script por lotes usando REG ADD, donde los datos del valor contienen "comillas dobles" incrustadas. Pero sigo recibiendo el error "Sintaxis no válida". Este es el valor que estoy intentando agregar:

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

Estoy intentando cambiar ImagePath a:

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

Sin embargo, recibo un error de sintaxis en el comando REG ADD. Este es el guión 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
)

Intenté encerrar %IPATHNEW%entre "comillas dobles", "comillas simples", [corchetes] y \barras invertidas\ pero sigo recibiendo el error de sintaxis.

¿Alguna idea de lo que estoy haciendo mal?

(Nota: este es un reemplazo de esta pregunta: REG ADD REG_SZ donde el valor contiene comillas dobles incrustadas)

Respuesta1

El comando que estás buscando probablemente sea el que reemplazará "por \":

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

El guión podría verse así:

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
)

Lo probé parcialmente y pareció funcionar.

información relacionada