このイディオムを(何度も)使用してレジストリ値を環境変数に読み込むバッチファイルがあります。
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B
(後にタブ文字がありますdelims=
)
これは、何千もの顧客のコンピューターで正常に機能します。しかし、ある顧客のコンピューター(Windows Server 2003を実行し、コマンド拡張機能が有効になっている)では、内部または外部コマンド、操作可能なプログラム、またはバッチファイルとして認識されず
に失敗します。" "コマンドを単独で'REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName'
実行すると正常に機能します。に存在します。 reg query
Reg.exe
C:\Windows\System32
コードをに変更することで問題を回避することができました
REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B
これでお客様は稼働しましたが、なぜ問題が発生したのかを理解し、将来的に回避できるようにしたいと思います。
主なトピックから少し外れています-レジストリ値(文字列またはDWORD)を環境変数に取得するためのより直接的な方法も役立ちます。