次の環境変数を想像してください。
システム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
という制約付きで、任意の変数名を選択できます(たとえば、および、またはおよび を使用できます)。a
c
n
p
x
z
-
for /f "options" %variable in ('command1') do command2
を実行し、出力を解析し、(s) に値を割り当て (上記 、ただし下記も参照)、 を実行します。command1
%variable
%a
command2
tokens=1,2*
%a
は、各(残りの)行の最初のトークン(単語)を取得し、%b
2 番目の単語を取得し、%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(無料)それを使用してバッチ ファイルを解釈します。