web-dev-qa-db-ja.com

コマンドラインを使用して、システムのPATH変数にエントリを永続的に追加するにはどうすればよいですか?

私は何をする必要がありますか:

  • フォルダーをSYSTEMレベルで%PATH%環境変数に追加します。
  • 変更を永続的にします。

私がそれを行う方法:

  • コマンドプロンプト、またはすべての必要なコマンド.BATファイルに書き込むことができる別の方法を使用する。
  • Windowsのベアインストールで利用できるonlyツールを使用するXP SP3、インターネット接続なし。
  • スクリプトをローカルで実行したいのですが、ターゲットシステムにリモートアクセスすることもできます。ただし、システムでデフォルト以外のサービス(つまり、リモートレジストリ)が有効になっているとは想定できないことに注意してください。

スクリプトが動作する必要があるシステム:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

私はSETコマンドにかなり精通していますが、追加ではなく既存の変数を一般的にoverwriteすることも知っていますそれに。それは受け入れられません。代わりに変数に追加する別のツール(または私が知らないSETのオプション)はありますか?または、既存の変数を別の変数またはテキストファイルに一時的にコピーすることを含む回避策をスクリプトに含める必要がありますか?

また、SETが変数を永久に変更しないことは私の理解です。私はSETXについての言及を見ましたが、それはWindowsに組み込まれているようには見えませんXP SP3(または、少なくとも、それは利用できないようです私が作業しているシステム上)レジストリの編集などを介して変更を永続的にする別の方法はありますか?

私は周りを見回して、Windowsでの環境変数の設定についてここからかなりのことを学びました。しかし、私はまだ自分のニーズに合う正確な重複質問を見つけていません。ある場合はお知らせください。

13
Iszi

次の例では、「C:\ bin」をパスに追加し、新しいパスをレジストリに保存します。

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

私はこれをXP SP3でのみテストしましたが、新しいバージョンでも動作するはずです。

マシンが再起動する前にログオンした新しいユーザーは、新しいパスを取得できない可能性があります。

ハリーは%SystemRoot%に関する彼のコメントに正解です。これらを保持したい場合は、最初にレジストリからパスの古い値を取得する必要があります。

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)
4
Peter Hahndorf