.png)
これは私を困惑させていますが、非常に単純なことのはずです。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%
が、構文エラーが発生し続けます。
何が間違っているのか分かりますか?
(注 - これはこの質問の代わりです: 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
)
部分的にテストしてみましたが、うまく機能しているようでした。