这让我发疯,但这一定非常简单。我正在尝试使用 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 where Value contains embedded double quotes)
您正在寻找的命令可能是将被替换
"
的命令\"
:该脚本可能如下所示:
我对它进行了部分测试,它似乎有效。