web-dev-qa-db-ja.com

バッチファイルからWindows 7で変数を永続的に設定する方法は?

Batファイルを使用して、Windows 7でPATH環境変数を設定しようとしています。ただし、機能していないようです。

私はこのWindowsコマンドを使用しています:

set PATH=%cd%;%path%
pause

ただし、このcmdインスタンスに対してのみ有効であるように見えます。最初にPATHを設定し、次にそのフォルダー内のライブラリーを見つける必要があるプログラムを実行するので、永続的にしたいです。

46
KaiserJohaan

Setではなくsetx.exeを使用します。

setx PATH "%cd%;%path%;"
pause

これにより、将来のすべてのcmdインスタンスのパスが設定されますが、現在のcmdインスタンスではnotに設定されることに注意してください。必要な場合は、元のsetコマンドも実行してください。

更新:2番目のパラメーターにスペースが含まれる場合は引用符で囲む必要があります(%path%には常にあります)。 %path%の最後の文字がバックスラッシュである場合、末尾の引用符がエスケープされ、最後のパスエントリが機能しなくなることに注意してください。引用符の前にセミコロンを追加することにより、これを回避します。

「;;;;;;」の危険を冒したくない場合繰り返し実行した後、パスの最後で、代わりに設定する前に%path%変数から後続のバックスラッシュを取り除きます。これにより、正しく機能します。

65
Ryan Bemrose

バッチファイルで行う場合は、regコマンドを使用して、HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmentキーのレジストリのパス値を変更します。

何かのようなもの:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath"

%path%変数のパスがシステムパスと一致することを確認します。

22
simon

Wizlbが指摘したように、

setx PATH "%cd%;%path%;" -m

ローカルenvをシステムenvにコピーし、-mなしでシステムenvをユーザーenvにコピーします。どちらも望ましくありません。レジストリの一部(システムまたはユーザー、以下の例ではシステム)のみを正確に編集するには、これを行う必要があります。

for /F "tokens=2* delims= " %%f IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx.exe PATH "%OLD_SYSTEM_PATH%;%OTHER_STUFF%;" -m

ソリューションの功績は http://www.robvanderwoude.com/ntregistry.php にあります

17
DenNukem

これを適切に行うには、単純なバッチファイルを超える必要があると思います。 MSDNドキュメント 状態:

システム環境変数をプログラムで追加または変更するには、それらをHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environmentレジストリキーに追加してから、 WM_SETTINGCHANGElParamが文字列「Environment」に設定されたメッセージ。これにより、シェルなどのアプリケーションが更新を取得できます。

まず第一に、UAC昇格プロンプトがなければそのキーに書き込むことができません。適切なマニフェストを実行可能ファイルに追加することで、最適な配置ができます。次に、ブロードキャストWM_SETTINGCHANGEはバッチファイルから単純ではありません。

あなたの立場で、私は仕事をするための短くてシンプルなコンソールアプリを書きます。

12
David Heffernan

単純な(より良い)ソリューションは、PathMgr.cmdを使用することです

Pathmgr_1.0.2.Zip in https://gallery.technet.Microsoft.com/Batch-Script-To-Manage-7d0ef21e

バッチファイルと同じフォルダーにpathmgr.cmdを解凍して配置し、バッチファイルに次の2行を記述します。

call pathmgr.cmd /del %cd% /y
call pathmgr.cmd /add %cd% /y

この意志:

1)ユーザー変数PATHを更新するだけ、2)システムPATHを複数回含めない

バッチファイルを複数回実行することもできますが、PATHには現在のパスのみが含まれます。

4
Changwang Zhang

「Zip_PROGRAM」というシステム環境変数を作成し、パス「reg add C:\ Program Files\7-Zip\7z.exe」で実行可能ファイルを指すようにするとします。

DOSプロンプトで以下を実行します。

手順1:次のコードを実行しますreg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"/v Zip_PROGRAM/t REG_SZ/d "C:\ Program Files\7-Zip\7z.exe"/f

ステップ2:ログオフしてログイン

ステップ3:DOSプロンプトを開き、「set z」を実行すると、システム環境変数の更新が表示されるはずです。

0
Paul Mai

このコマンドを使用しますsetx PATH "%PATH%;%MVN_HOME%\ bin \"

とにかく、使用する必要がある現在のセッションでは設定されません

set PATH = "%PATH%;%MVN_HOME%\ bin \"

0
Santosh b