这让我很抓狂,但肯定是很简单的事情。我尝试使用 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 其中值包含嵌入的双引号)
答案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
)
我对其进行了部分测试并且它似乎有效。