web-dev-qa-db-ja.com

環境変数を更新します

環境変数を変更した後、Windowsのcmdシェルを更新するにはどうすればよいですか?

つまり、bashでは「source〜/.bashrc」を実行できます

12
Don Ch

それは本当にあなたの環境変数がどのように設定されたかに依存します。たとえば、コマンドラインで「SET」コマンドを使用した場合、現在のインスタンスにのみ影響します。一方、「SETX」などのコマンドは、環境変数の値を永続的に調整します。 SETXは、cmdの将来のすべてのインスタンスが更新を確認できるようにします。ローカル環境には影響しません。

環境変数が別のアプリケーションによって設定され、更新されていない場合は、多くの場合、次のいずれかを行うのが最も簡単です。 「Explorer.exe」プロセスを再起動するか、ログアウトして再度ログインするか、再起動します。 基本的に、環境変数をリロードするようにExplorerに指示する必要があります。インストーラーなど、開発したアプリケーションの場合は、SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");を呼び出していることを確認してください。これは、エクスプローラーに環境変数のキャッシュを更新するように指示します。

別のプロセスによって起動されたアプリケーションは、親から環境変数を継承するため、これは重要です。そのため、エクスプローラーからcmdを起動すると、エクスプローラーが認識しているとおりに変数を取得します。

4

Windowsでマスター環境を設定および取得することは、BartPEの人々がかなりの時間を費やしたことです。

メイン環境はレジストリに保存されますが、エクスプローラシェルはこれをそのアドレスに読み取ります。ここから、各cmd.exeセッションに送信されます。

SETはcmd環境にのみ影響します。 SETXを使用すると、マスター環境を変更できますが、設定はローカル環境に反映されません。

Frank WestlakeのCONSETおよび4NTはレジストリからエントリをフェッチできますが、特にマスター環境用のスイッチはありません。

通常ロードされるウィンドウはレジストリへの設定を追跡しますが、minintを介してロードされるウィンドウ(つまりWinPE)は追跡しません。したがって、レジストリの設定とレジストリの読み取りは両方で機能しますが、通常は起動されたWindowsのみが設定を表示し、新しいcmd、exeプログラムに渡します。

1
wendy.krieger

これは非常に簡単になり、シェルを再起動する必要はありません。

  1. スタートメニューを開き、RefreshEnv.batを検索します
  2. RefreshEnv.batを実行します

新しく追加した環境変数が新しいCommand/PowerShellインスタンスで使用可能であることを確認し、更新を確認します。

0
Lance McCarthy

これは、環境変数をどこに「設定」するかによって異なります。 bashの例に相当するものは次のようになります。

ファイル:env.bat

set FOO=bar

そして今、あなたはそれをリフレッシュします

% call env.bat

しかし、私はあなたがwindows-system-settings-dialog(またはその名前が何であれ)を介してそれを行ったと思います。この結果、実際にレジストリを変更したことになります。これらのレジストリ設定は、新しいプロセスを起動したときにプロセスにマップされます。

したがって、新しいプロセス(この場合はcmd.exe)を開始することができますOR必要な変更を反映したレジストリキーを読み取ることができます。また、小さな.bat /.cmdを書き込むこともできます。レジストリから環境を取得し、現在の環境に応じて変更するスクリプト(気分が高ぶった場合は、昼食後にこれを行います)。

0
akira