6

環境変数には、ユーザー変数とシステム変数の両方の PATH 変数があります。

バッチ スクリプトで、ユーザーの PATH 変数に新しい特定のパスを追加するには、現在の値を選択する必要があります。残念ながら、%PATH% はユーザー変数とシステム変数の組み合わせを返します。

もちろん、新しいカスタム パス値をユーザー変数に追加したいだけです。システムパスで強化しても意味がありません。それが私が2つの変数を持っている理由です。

前もって感謝します。

編集:ドキュメントで次のステートメントが見つかりました:

%PATH% 変数は、システム変数とユーザー変数の両方として設定され、2 つの値を組み合わせて、現在ログインしているユーザーの PATH を指定します....

例:

ユーザー変数:

PATH
value: c:\dev

システム変数

PATH
value: c:\Program Files

私がやりたいことは、ユーザー変数に値 c:\tmp を追加して、最終的に PATH の値が c:\dev;c:\tmp になるようにすることです。

ただし、コマンド ウィンドウを開くと、次のようになります。

echo %PATH%
c:\Program Files;c:\dev

したがって、 setx は次のことを行います

setx path "%path%;c:\tmp"

新しいコマンドを開く

echo %PATH%
c:\Program Files;c:\dev;c:\tmp

c:\dev;c:\tmp だけが必要だったので、それは間違っています。

今回はもっと明確だったと思います。

4

2 に答える 2

9

変数をどのように変更していますか?

環境変数は 1 つしかないPATHので、そのまま変更できます。これらの変更は一時的なものです (そして、プロセスとその子に対してローカルです)。

レジストリには、プロセスの作成時に環境変数が初期化される永続的な場所が 2 つ (実際にはそれ以上) あります。regこれらはユーティリティを使用して変更できます。それらは分離されているため、あいまいさはありません。

  • HKEY_CURRENT_USER\環境
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

レジストリの変更を有効にするには、再ログインする必要がある場合があります (これらの設定が変更されたことをエクスプローラーに通知するプログラムによる方法があるかどうかは覚えていません)。また、デフォルトでは、子プロセスは親プロセスの環境を継承することに注意してください (親プロセスが特別な措置をとらない限り)。たとえば、cmdウィンドウを起動し、後でシステム設定ダイアログを介して環境を変更すると、そこから開始されたアプリケーションは表示されcmdません。変更。

[UPD]regユーティリティを使用して、レジストリからユーザー固有の環境変数の値を取得できます。

reg query HKCU\Environment /v PATH

ただし、役に立たないテキストを吐き出すため、実際の値の出力をフィルタリングする必要があります。ここに呪文の例があります:

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set value=%B

結果は環境変数に格納されますvalue%バッチ ファイルで使用する場合は、必ず 'sを 2 つ付けてください。

于 2012-11-13T11:18:09.913 に答える
2

あなたの質問を理解できれば、2 つの%PATH%変数があります。1 つはシステム 1、もう 1 つはユーザー 1 (おそらく後者は自分で作成したもの)。

これを試してみましたが、ユーザー環境変数で機能するようです

setx /s computername PATH %PATH%;newpathvalue

これをテストしたとき、実際にPATH新しい変数に置き換えて動作することを確認しましたが、念のため、これを行う前に既存の変数のコピーを作成することをお勧めします。

指定した新しい値で既存のユーザー環境変数の末尾にタグを付け、PATHセミコロンで他の値と区切ります;

お役に立てれば

于 2012-11-13T11:03:41.727 に答える