• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:環境変数の再帰展開について)

環境変数の再帰展開について

このQ&Aのポイント
  • 環境変数の中で環境変数を使用したときに、思ったように文字列が展開されない問題があります。
  • Windowsの環境変数には2種類の属性があり、展開可能属性にしても再帰展開がうまく機能しないことがあるようです。
  • XP環境でもVista環境と同じように環境変数の再帰展開をすることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.2

補足によると、「ユーザー環境変数側に設定した」とのことなので、改めて、検証してみました。 システム側、またはシステム側&ユーザー側両方に、 Work_Path=%SystemDrive%\Temp を設定した場合には、 Path=C:\Temp;C:\WINDOWS\system32;C:\WINDOWS・・・・ と正常に展開されます。 ユーザー側にのみ設定した場合には、 Path=%Work_Path%;C:\WINDOWS\system32;C:\WINDOWS・・・・ と展開されない形で表示されました。 しかし、私の環境でユーザー環境変数同士で正常に展開されているものがあるので、「ひょっとしてアルファベット順?」と、 Pass=%SystemDrive%\Temp Path=%Pass%;%Path%; を設定してみた所、 Path=C:\Temp;C:\WINDOWS\system32;C:\WINDOWS・・・・ と正常に展開されました。 どうやら、ユーザー環境変数同士の場合、 アルファベット順に展開していって、展開できないものはそのまま ということなのではないでしょうか? Vista環境が無いので確認できませんが、Vistaでユーザー環境同士の展開が正常に行われるとしたら、すべての展開が終わるまでループさせているのではないかと思います。

emuesuenu
質問者

お礼

環境変数の展開の順番は、 システム環境変数 -> ユーザー環境変数で それぞれアルファベット順に行っているようですね。 非常に勉強になりました。 展開順を考慮して変数を定義することにします。 ちょっと検索してみたのですが、ネット上に全然情報がないことに驚きました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

今、手元にXP環境が無いので、2000 ServerとServer 2003で確認しましたが、ご質問のような再帰展開の不具合は発生しませんでした。 ご質問のように「コマンドプロンプト」で Set Path を実行しても、システム環境変数側の設定が表示されるのみで、ユーザー環境変数側の設定は表示されませんので、ユーザー環境変数側を UserPath=%Work_Path%;%Path% として実行してみました。 その結果、まず、システム環境変数側に設定した Work_Path=%SystemDrive%\Temp が、"再起動後"でないと「コマンドプロンプト」上に表示されませんでした。(『システムのプロパティ』のシステム環境変数の一覧には表示されませんが、"SystemDrive=C:"は元々、システムインストール時に自動的に設定されているので表示されます。) 再起動後の「コマンドプロンプト」上では、正常に、 UserPath=C:\Temp;C:\WINDOWS\system32;C:\WINDOWS;・・・・ と再起展開されました。 >またレジストリの"Command Processor\EnableExtensions"も1になっていることを確認しています。 レジストリに同じ"EnableExtensions"が複数箇所あるのをご存知でしょうか? HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor EnableExtensions  REG_DWORD  0x00000001 HKEY_CURRENT_USER\Software\Microsoft\Command Processor EnableExtensions  REG_DWORD  0x00000001 両方の設定が異なる場合には、ユーザー側の設定が優先されます。

emuesuenu
質問者

補足

>今、手元にXP環境が無いので、2000 ServerとServer 2003で確認しましたが、ご質問のような再帰展開の不具合は発生しませんでした。 > >ご質問のように「コマンドプロンプト」で >Set Path >を実行しても、システム環境変数側の設定が表示されるのみで、 この点についてですが、 set PATHとした場合、システム環境変数とユーザー環境変数の両方が表示されないでしょうか? >その結果、まず、システム環境変数側に設定した >Work_Path=%SystemDrive%\Temp >が、"再起動後"でないと「コマンドプロンプト」上に表示されませんでした。 ここは私の書き間違いでした。 おっしゃるとおりシステム環境変数に登録した場合は、 再起動後でないと反映されません。 実際にはユーザー環境変数に登録していました。 その場合、コマンドプロンプトの再起動のみで反映されます。 >再起動後の「コマンドプロンプト」上では、正常に、 >UserPath=C:\Temp;C:\WINDOWS\system32;C:\WINDOWS;・・・・ >と再起展開されました。 なるほど。Windows 2000/2003 Serverでは大丈夫なのですね。 こちらはXP SP2をインストールした2台のPCで確認したのですが、 両方ともダメでした。 >レジストリに同じ"EnableExtensions"が複数箇所あるのをご存知でしょうか? はい。全ての項目で1になっているのを確認済みです。 古いシェルで動かないのだったら理由は理解できるのですが、 "XPのみ"となるとちょっと気になりますね。 もう少し調べてみたいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A