別の環境変数に関してWindows(XP)環境変数を定義できますか?


3

次のように2つの環境変数を定義します。

PROGRAM_HOME=P:
JAVA_DIR=%PROGRAM_HOME%\Java

明らかに次のように動作します:

dir %PROGRAM_HOME%

しかし、以下はそうではありません:

dir %JAVA_DIR%

PROGRAM_HOMEに関してJAVA_DIRを定義したい場合はどうすればよいですか?

編集:削除された\(タイプミスだった)

PROGRAM_HOME = P:\ ==>PROGRAM_HOME = P:


正確に「機能しない」ものは何ですか?エラーメッセージが表示されますか?
-fretje

"システムは、指定されたファイルを見つけることができません。" これは、GUIダイアログから変数を設定した場合、%PROGRAM_HOME%変数が展開されないためです。ところで、Rapid Environment Editorを使用しています。
ヤニーブ

そして、あなたの問題は、Rapid Environment Editorが他の環境変数の拡張をサポートしていないということです。
-fretje

回答:


1

fretjeで検出された構文エラーとは別に、これらの変数を永続的にしたい場合は、Windows環境変数を変更する必要があります。

これは、コントロールパネル/システム/詳細設定タブ/環境変数...ボタンで行います。

また、より明確なユーザーインターフェイスを提供するRapid Environment Editor(donationware)と呼ばれる素敵な製品もあります。

編集

あなたが何をしようとしているのか理解できたと思いますが、それはレジストリを編集することによってのみ可能です。次のマイクロソフトの記事では、従うべきプロセスについて説明
しています環境変数をシステムに伝播する方法

簡単に言えば、ユーザー環境変数については、これらすべての変数が格納されているレジストリキーHKEY_CURRENT_USER \ Environmentに移動する必要があります。

そこで、REG_EXPAND_SZ型(regeditでは「拡張文字列値」という名前)の2つの変数を追加する必要があります。これは、このタイプを追加する唯一の方法です。Windowsはデフォルトでは、単に展開できないREG_SZタイプのみを追加するからです。

私は今それを試しましたが、完全にうまく機能します。


私はそのエディタを使用するのですが、それだけでENVは1の深さにvarsの他のenv内に埋め込まれたVAR「拡張」することができ、私は自分自身を明らかにした願っています
Yaneeve

とった!編集をご覧ください。
harrymc

4

「\」を繰り返すためだと思います。

次のことを行う場合:

>set %program_home%=c:\
>set %java_dir%=%program_home%java
>dir %java_dir%

すべてが正常に動作します。

もちろん、代替手段は次のとおりです。

>set %program_home%=c:
>set %java_dir%=%program_home%\java
>dir %java_dir%

setパラメータなしでコマンドを発行するだけで、さまざまな環境変数の値を確認できます。次に、%java_dir%変数にが含まれていることがわかりますc:\\java


わかりました、それは機能しますが、cmd経由ではなく、変数を一度だけ設定したいと思います。何を提案しますか?
ヤニーブ

1
ヤニーブ、彼の答えを読み間違えているのではないかと思う。環境変数の「JAVA_DIR =%PROGRAM_HOME%\ Java」の\を削除すると、動作するはずです。ここでfretjeがsetで使用する構文は、システム環境変数と同じように使用できることに注意してください。
-RJファルコナー

2

はい、これは私が文書化したことは一度もありませんでしたが、これは本当に奇妙な振る舞いです。

上記の例を使用して、最後の行の変数を引用符で囲みます。

dir "%JAVA_DIR%"

誰かがこれの理由またはそれを説明するリンクを知っているなら、これは素晴らしいでしょう。ただし、一部は別の変数で定義されている変数を参照する場合の動作は一貫しています。


何らかの理由で、これは「set」コマンドを使用して同じプロセス内で変数を定義する場合にのみ機能します。
ヤニーブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.