cmd.exeで(システム全体の)環境変数を設定または変更する


13

コマンドラインから環境変数を追加、変更、削除する便利な方法を探しています。特に、cmd.exeにいくつかの変数を追加しなければならない状況に陥ります。

誰かが%PATH%変数を変更する(つまり、新しいディレクトリを追加する)GUI以外の方法を教えてくれて感謝しています。

変更は、cmdセッションの期間だけでなく、永続的なものでなければなりません。


1
私はあなたが見つける一つの問題は、最も変化していることだと思う永久システム全体の環境変数が必要と変更された値を使用するユーザのセッションのログアウト/ログイン(または再起動)を。
いんちきのキホーテ2009年

回答:


8

regコマンドを使用してレジストリ変数を直接操作するOld Schoolの方法は、お金にかかっていました。方法は次のとおりです。

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

次のようなapath.batという1行のスクリプトにそれを投げます。

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

次に、スクリプトを呼び出してダイヤルインするときに追加する新しいディレクトリのパスのみを指定する必要があります。

例:apath.bat%addonpath%

ヒンチは正しいが。Vista以上を使用している場合に最適な方法は、レジストリをregコマンドで直接操作するリスクなしに環境変数を伝播できるように設計されたSETXコマンドを使用することです。 ENV変数をその場で使用するのに十分なだけ操作します。


このコマンドには再起動が必要ですか?
ユザーアリ

いいえ。ただし、新しい(cmd)プロセスを使用する必要があります。
マイク14年

1
私にとっては、再起動が必要ですか?どうして?私はWindows XP、sp3を使用しています。
長王張

15

setxを使用できます。

ユーザー変数:

SETX PATH "%PATH%;C:\MyDir"

システム変数:

SETX PATH "%PATH%;C:\MyDir" /M

SETXはVista以降で利用できると思いますが、XPを使用しています。
ルネニフェネガー2009年

Vistaマシンからsetx.exeをコピーすることで回避できる場合があります。おそらく動作しませんが、動作する可能性があります。
いんちきのキホーテ2009年

2
SETXは、Windows Server 2003のリソースツールの一部です。system32ディレクトリ、またはパス(chicken-egg!)に追加された他のディレクトリに追加するだけです。
パラドロイド

/ Mパーツが必要なので、ユーザー変数ではなくシステム変数を変更できます。ありがとう!
アンドレイSfat

指定された両方のコマンドが間違っています。どうして?Windowsは実際には、システム全体とユーザーごとの2つのPATH値を保持しています。を入力echo %PATH%すると、のように結合されていることがわかります<system path>;<user path>。したがって、最初のコマンドはシステムパスの現在の項目をユーザーパスに表示します(それほど悪くはありません)。2番目のコマンドはユーザーパスの現在の項目をシステムパスに表示します(これは受け入れられません)。
サーシャ

1

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunレジストリキーを使用してバッチファイルを指定すると、難解な設定ダイアログを詳しく調べることなく、半永久的な変更を加えることができます。


私の知る限り、それはcmd.exeの後続の呼び出し(/ dフラグなし)にのみ影響し、システム全体または他の(その後に呼び出される)プロセスには影響しません。
ルネニフェネガー2009年

それは正しいです。利点は、異なるプロセスが何をすべきかわからないことを心配することなく、より多くのことができることを意味します。ただし、対話型のプロンプトでは常に機能します。これは常に便利です。P
Phoshi 09年

1

GUIを使用したくない場合(コントロールパネル、システム、詳細設定、環境変数、PATHなど)、おそらくを使用REGして設定できますHKCU\Environment\PATH

  • 更新 %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

/fあなたが対話的に質問に答える必要はありませんので、既存の値の上書き力。

編集: %PATH%引用符で囲む必要があります。

編集:これを有効にするには、おそらく再起動または再ログインが必要になることに注意してください。GUIで変更すると、すぐに有効になります(新しいcmd.exeセッションの場合)。

参照:http : //support.microsoft.com/kb/104011

リファレンスに記載されているように、コードを記述したい場合は、WM_SETTINGCHANGEを送信できます。これにより、ログイン/ログアウトの要件を回避できます。


それは非常に便利です。しかし、その変数を照会しても、何も返されません。
PA。

ふむ XP Pro SP3英語版では、次でPATHを取得しますREG QUERY HKCU\Environment /v PATH
オペロ2009年

システム全体のパスではなく、ユーザー固有のパスです。その人がどこに住んでいるかわからない。それらは同じものに設定できますが、通常は別々のものを含めることができます(そして、作業パスは2つのマージです)。
いんちきのキホーテ2009年

そう、HKCUにあります。リンクされているMicrosoft KB記事には、両方のレジストリの場所があります。
opello

1
これはほとんど私が探しているものです... cmd.exeからWM_SETTINGCHANGEも送信する方法があった場合。
ルネナイフェネガー

0

現在のcmd.exeプロセスのパスを簡単に変更できます。

PATH c:\MyNewDirectory;%PATH%

PATHコマンドのヘルプについては、HELP PATHをいつでも実行できます。


1
これはセッションに適しているだけではありませんか?
JL。

はい、これはセッション間で持続しません。
ジョンT

JLは正解であり、永続的な解決策を探していました。それに応じて質問を編集しました。
ルネニフェネガー2009年

0

システム全体に恒久的な変更を加えるには、システムコントロールパネル(別名、[マイコンピューター]-> [プロパティ]-> [詳細]-> [環境変数]、WinXPの場合)を使用する必要があります。そこの設定は、ExplorerシェルのGUIプログラムを含むシステム全体に影響します。

cmd.exeシェルでこれらの変更のみが必要な場合は、cmd.exeウィンドウを起動するたびに変更を設定するバッチファイルを実行できます。 Phoshiの回答はに言及していますがHKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun、これは優れたオプションのようです-簡単に小さな変更を行い、必要に応じてコマンドラインから再実行します。ただし、これはGUIウィンドウやExplorerシェルには影響しません。

実際、Sysinternalsにはこれを実行できるユーティリティがないことに驚いています。他のPStoolsでもできますか?


0

これを行う方法はたくさんあります。REG ADDは1つ、またはREG IMPORT(別のコンピューターからエクスポートされた.REGファイルを使用)です。SETX / Mは別です。また、グループポリシーの基本設定を使用してプッシュアウトすることもできます(多数のコンピューターで簡単に実行できる方法)


0

ここで言及されていない別の考えとして、コントロールパネルを起動して自動入力するオートホットキースクリプトを作成します。すでにAHKユーザーである場合は、うまく機能します:-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

また、hklm / system / currentcontrolset001 / control / session manager / environment:path keyの編集についてはどうですか?ただし、同じキーはhklm / system / currentcontrolset002およびhklm / system / currentcontrolsetの下にあります。これは正しいかもしれません、ここで:https : //stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.