特定の変数は Windows システム環境変数 PATH で展開されません

特定の変数は Windows システム環境変数 PATH で展開されません

何らかの理由で、特定の環境変数は、"パス"システム変数内の変数。

たとえば、%SystemRoot%は正常に動作しますが、は%WinDir%動作しません。と も動作しません。%ProgramFiles%%ProgramFiles(x86)%

もちろん、変数ではなくフルパスを使用できることはわかっていますが、それは重要ではありません。

何か案は?

以下はスクリーンショット/例です:

ここに画像の説明を入力してください

答え1

SystemRootこれは疑似/定義済み環境変数であるため、期待どおりに拡張されます。これはWinDir通常の環境変数であり、PATH初期化シーケンスのように他の環境変数と「競合」します。

レイモンド・チェンがわかりやすく説明している。Windows 機密: 隠れた変数: "ある環境変数を別の環境変数に埋め込むことは、単に操作タイミングの問題である。さらに引用します:

環境構築プロセスは次のように機能します。おおよそ 4 つのステップで進行します。

  • まず、システムは、SystemRoot や ALLUSERSPROFILE (COMPUTERNAME や ProgramFiles は除く) などのマシン全体の定義済み環境変数をいくつか作成します。
  • 次に、[環境変数] ダイアログ ボックスの [システム] セクションから環境変数を作成します。システム環境変数の定義では、前の手順で作成された定義済み環境変数を参照するために「%」表記を使用できます。たとえば、システム環境変数を %SystemDrive%\Extras に設定できます。システム環境が完了すると、Windows はユーザー環境の構築を開始します。
  • ステップ 3 では、USERPROFILE や APPDATA などの定義済みのユーザーごとの環境変数を作成します。COMPUTERNAME および ProgramFiles 関連の変数もここで作成されますが、これらは技術的にはシステム変数であり、ユーザーごとの変数ではありません。
  • 最後に、システムは環境変数を作成します。これらは [環境変数] ダイアログ ボックスの [ユーザー] セクションにあり、最初の 3 つの手順で作成されたすべての変数にアクセスできるため、ユーザー環境変数を %USERPROFILE%\Extras に設定したり、2 番目の手順でカスタム システム環境変数を設定したりできます。ユーザー環境変数の名前がシステム環境変数と同じ場合は、新しい値が古い値を置き換えます。

...

ある顧客は、システム PATH 環境変数を %APPDATA%;C:\Windows に設定するのに苦労していました。最終的な環境には、APPDATA 環境変数の値に置き換えられるのではなく、指定されたリテラル パス (パーセント記号など) のみが含まれていました。前述の操作のシーケンスを確認すると、なぜこのようなことが発生したかは明らかです。顧客は、まだ定義されていない変数に基づいてシステム環境変数を設定しようとしていました。

解決策は簡単でした。PATH の編集をシステム環境リスト ボックスからユーザー環境リスト ボックスに移動します。こうすることで、%APPDATA% 環境変数を使用するときに、変数がそこに存在するようになります。

他の環境変数に基づいて環境変数を定義するときに起こり得る「競合状態」の簡単な例として、2 つのシステム変数を次のように定義する循環的なケースを考えてみましょう。

bbb=%ccc%
ccc=%bbb%

私の Windows 7 では、変数は次のように評価されます。

C:\etc>set
...
bbb=%ccc%
ccc=%ccc%

関連情報