ユーザーのPATH変数を含めずにシステムPATH変数に追加する

ユーザーのPATH変数を含めずにシステムPATH変数に追加する

次の環境変数を想像してください。

システムPATH =C:\Windows
ボブのユーザーパス =C:\Users\Bob

コマンドプロンプトでは、PATHコマンドはC:\Windows;C:\Users\Bob

走った後setx /m PATH "C:\Node;%PATH%"
システムパス =C:\Node;C:\Windows;C:\Users\Bob

新しいコマンドプロンプトでは、PATHコマンドはC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob

別のユーザー、アリスがログインします。
アリスのユーザーパス =C:\Users\Alice

コマンドプロンプトでは、PATHコマンドはC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

ボブの変数には重複したパスがありPATH、アリスのPATH変数にはボブのパスがあります。

PATH現在のユーザーのものを汚染せずにシステムに追加する方法はありますかPATH?

答え1

Windows 7では、システムパスを次のように調べることができます。

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

それが Windows 8 でもまだ機能する場合は、それを使用して新しい値を構築します。

の出力を解析する方法を考えなければなりませんreg query。以下はうまくいくかもしれない方法です:

/f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') で currentValue=%c を設定します

どこ

  • 文字列は、一重引用符で囲まれたコマンド(上記)です。'reg query "HKLM\…\Environment" /v path'reg query
  • a、、currentValueおよびは変数名です。および は1 文字ずつで、2 文字離れている必要があるcという制約付きで、任意の変数名を選択できます(たとえば、および、またはおよび を使用できます)。acnpxz
  •                             for /f "options" %variable in ('command1') do command2
    を実行し、出力を解析し、(s) に値を割り当て (上記 、ただし下記も参照)、 を実行します。command1%variable%acommand2
  • tokens=1,2*%aは、各(残りの)行の最初のトークン(単語)を取得し、 %b2 番目の単語を取得し、%c行の残りを取得することを意味します。

    • 最初の単語はpath(値の名前)です。
    • 2 番目の単語はREG_EXPAND_SZ(値の型) です。
    • 行の残りの部分が値です。

    (tokens=2*と を使用することもできますcurrentValue=%b。)

したがって、上記を実行した後、次のことができるはずです。

setx PATH "C:\Node;%currentValue%" /m
  • これをスクリプト (.BATファイル) 内で行う場合は、%%aと を使用します%%c
  • echoで実行する前に、必ず コマンドでこれをテストしてくださいsetx

答え2

すべてのユーザーが使用するシステム パス値に Bob 固有のパスを入れないでください。

システム パスの古い値を読み取り、それを変更して、新しい値を設定します。cmd.exe(明らかにsetコマンドは作成/変更/削除はできますが、読み取りはできません) これらの機能を提供しない場合は、バッチ ファイルによって呼び出されるプログラムにそれを配置します。

システム パスの値は、レジストリを介して検索 (および変更) されます。正確な場所を見つけるために、必要な値を検索するだけです。そのキー パスを Google で検索して、それについて何が言われているかを確認します。
(後で説明します。それらはHKLM\System\CurrentControlSet\Control\Session Manager\EnvironmentおよびですHKCU\Environment)

Windows 用のより高度なスクリプト言語、または Windows API をサポートするスクリプト言語であれば、これを処理できます。または、選択した言語で実行可能なコンパイル済みプログラムでもかまいません。

CMD交換シェル指揮をとる@REGQUERY 関数があります:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

特定のマシンを念頭に置いているようなので、インストールすることができますTCC/LE(無料)それを使用してバッチ ファイルを解釈します。

関連情報