web-dev-qa-db-ja.com

バッチスクリプトを使用して、データに必要な引用符を含むレジストリキーをWindowsに追加する

ここにリトルウィリス。バッチスクリプトを使用して、.jarファイルをダブルクリックするときに使用される既存のレジストリキーを編集しようとしています。問題は、入力しようとしているデータに引用符が含まれていることですが、文字列と見なされるには引用符も必要です。

例:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* /f

これをバッチスクリプトで実行すると、cmdウィンドウに「エラー:コマンドラインパラメーターが多すぎます」と出力されます。

だからこれを簡単にするために。引用符を含むデータとして「C:\ ProgramFiles\Java\jre7\bin\javaw.exe」-jar「%1」%*、および%1と%*をそのまま使用してレジストリキーを追加したい実際のステートメントまたは文字列に変換されません。

編集:

レジストリは通常、次のコマンドライン文字列を使用して追加されます。

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*  

コマンドラインでは正常に機能しますが、バッチスクリプトでこれを使用したときに以下に示すコードと同じように、「%1」と%*は表示されません。

9
Trey

バックスラッシュを使用して、内側の引用符をエスケープします。

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%1\" %*" /f
17
Marc

パーセントリテラルは、バッチファイルで2倍にする必要があります:\"%%1\" %%*"

12
dbenham

dbenhamの答えに加えて、ロケーションパスにはバックスラッシュと引用符を使用する必要があります!!
(つまり、"\"C:\Program Files.....の代わりに"C:\Program Files.....を使用する必要があります)

したがって、これは典型的なパーセント記号&追加の問題に対する最終的な答えです。

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%%1\"" /f

dbenhamに感謝します!

2
selnomeria

別の方法は一重引用符を使用することです。一部のアプリケーションはそれを正しく読み取ることができます。例:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "'C:\Program Files\Java\jre7\bin\javaw.exe\' -jar '%1' %*" /f
1
AllGamer