
環境変数の中で環境変数を使用したときに、
こちらの思ったように文字列が展開されません。
例.
システム環境変数
SystemDrive=C:
WORK_PATH=%SYSTEMDRIVE%\temp
PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
ユーザー環境変数
PATH=%WORK_PATH%;%PATH%
こんな感じでセットされている場合、
コマンドプロンプトでset PATHした場合の結果が異なります。
Vistaでは C:\temp;C:\WINDOWS~ と展開されますが、
Windows XP環境では %SYSTEMDRIVE%\temp;C:\WINDOWS~ と、
%SYSTEMDRIVE%の部分がそのままになってしまいます。
Windowsの環境変数には2種類の属性があり、
上記の環境変数を登録する際は"展開可能"属性にしました。
またレジストリの"Command Processor\EnableExtensions"
も1になっていることを確認しています。
ちなみにset WORK_PATHとしたときは、
両方の環境で C:\temp と表示されることから、
環境変数の再帰展開がうまく機能していないと思われます。
XP環境でもVista環境と同じように環境変数の再帰展開をすることは可能でしょうか?
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でユーザー環境同士の展開が正常に行われるとしたら、すべての展開が終わるまでループさせているのではないかと思います。
環境変数の展開の順番は、
システム環境変数 -> ユーザー環境変数で
それぞれアルファベット順に行っているようですね。
非常に勉強になりました。
展開順を考慮して変数を定義することにします。
ちょっと検索してみたのですが、ネット上に全然情報がないことに驚きました。
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
両方の設定が異なる場合には、ユーザー側の設定が優先されます。
この回答への補足
>今、手元に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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ネットワークに詳しい方教えて...
-
親子で共有していたAppleIDを別...
-
2台目のプレステ5について教え...
-
LINEに使用している電話番号を...
-
アカウントに電話番号登録すべ...
-
彼氏のLINEが消えました! 先日...
-
承っておりません。 ↓ できませ...
-
スマホでしか検索していない商...
-
高3女子です ローターやバイブ...
-
Switch版マインクラフトについ...
-
Outlookの不要アカウント(受信...
-
2台の端末に同一アカウントでTe...
-
Qoo10でLINEログインをする際、...
-
Thunderbirdのフォルダ名変更に...
-
ACCESSで開いているユーザーの...
-
Wordを開くと、前に編集してい...
-
<ACCESS>別テーブルのレコー...
-
Thunderbirdの設定のみをコピー...
-
Google アカウントの電話番号の...
-
PC買い替え時のマイクロソフト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ネットワークに詳しい方教えて...
-
2台目のプレステ5について教え...
-
親子で共有していたAppleIDを別...
-
彼氏のLINEが消えました! 先日...
-
LINEに使用している電話番号を...
-
承っておりません。 ↓ できませ...
-
Switchで子供と2人でフォートナ...
-
高3女子です ローターやバイブ...
-
質問なんですが、、前の携帯でI...
-
PS5のアカウント二つありアカウ...
-
POOLからスマホへ写真を移す手...
-
PS4で別アカウントにデータを移...
-
Outlookの不要アカウント(受信...
-
このアプリは、何回通報された...
-
嫌いな人を徹底的にブロックす...
-
スマホでしか検索していない商...
-
利用できなくなったチャットア...
-
line 同じ名前を使われている!
-
Wordを開くと、前に編集してい...
-
Thunderbird 開封確認
おすすめ情報