REG ADD REG_SZ 値に二重引用符が埋め込まれている

REG ADD REG_SZ 値に二重引用符が埋め込まれている

これは私を困惑させていますが、非常に単純なことのはずです。REG ADD を使用してバッチ スクリプトに ImagePath 値 (REG_SZ) を追加しようとしていますが、値データには埋め込まれた「二重引用符」が含まれています。しかし、「無効な構文」エラーが繰り返し発生します。追加しようとしている値は次のとおりです。

Key  : HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS
Value: ImagePath REG_SZ
Data : "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -sSQLEXPRESS 

データを一重引用符で囲んでみました:

@SETLOCAL
@SET IPATH="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -sSQLEXPRESS
@REG.EXE ADD "HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS" /f /v ImagePath /t REG_SZ /d '%IPATH%'

また、「二重引用符」、感嘆符 (!)、[角括弧]、[バックスラッシュ]、[キャレット] で囲むことも試しましたが、構文エラーが発生し続けます。

何が間違っているのか分かりますか?

答え1

パラメータは二重引用符で囲む必要があります。その他のランダムに選択された句読点 (一重引用符、感嘆符など) は機能しません。

ただし、内側バックスラッシュ付きの二重引用符:

@SET ImagePath=\"C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe\" -sSQLEXPRESS
@REG.EXE ADD "HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS" /f /v ImagePath /t REG_SZ /d "%ImagePath%"

SET注 1: Cmd で値を割り当てるには、 ( のように)を使用する必要がありますSET VAR=VALUE

注 2: 変数名として使用しないでくださいPATH。これは、プログラムの場所を指定するために Cmd によって既に使用されており、上書きするとスクリプトを実行できなくなりますREG.EXE

関連情報