REG ADD REG_SZ, wobei der Wert eingebettete Anführungszeichen enthält (Redux)

REG ADD REG_SZ, wobei der Wert eingebettete Anführungszeichen enthält (Redux)

Das macht mich wahnsinnig, aber es muss etwas ganz Einfaches sein. Ich versuche, einen ImagePath-Wert (REG_SZ) für einen Dienst in einem Batch-Skript mit REG ADD zu ändern, wobei die Wertdaten eingebettete „Anführungszeichen“ enthalten. Aber ich erhalte immer wieder die Fehlermeldung „Ungültige Syntax“. Dies ist der Wert, den ich hinzuzufügen versuche:

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

Ich versuche, den ImagePath wie folgt zu ändern:

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

Allerdings erhalte ich einen Syntaxfehler im REG ADD-Befehl. Dies ist das abgespeckte Skript:

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

Ich habe versucht, es %IPATHNEW%in Anführungszeichen, einfache Anführungszeichen, [Klammern] und \Backslashes\ einzuschließen, aber ich erhalte immer wieder den Syntaxfehler.

Irgendeine Idee, was ich falsch mache?

(Hinweis: Dies ist ein Ersatz für diese Frage: REG ADD REG_SZ, wobei der Wert eingebettete doppelte Anführungszeichen enthält)

Antwort1

Der Befehl, den Sie suchen, ist wahrscheinlich der, der "durch Folgendes ersetzt wird \":

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

Das Skript könnte folgendermaßen aussehen:

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
)

Ich habe es teilweise getestet und es schien zu funktionieren.

verwandte Informationen