
これは私を困惑させていますが、非常に単純なことのはずです。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
。