回答:
環境変数がどのように設定されているかによります。たとえば、コマンドラインで「SET」コマンドを使用した場合、現在のインスタンスにのみ影響します。一方、「SETX」などのコマンドは、環境変数の値を永続的に調整します。SETXは、cmdの今後のすべてのインスタンスが更新を確認するようにします。ローカル環境には影響しません。
環境変数が別のアプリケーションによって設定されており、更新されていない場合、多くの場合、「explorer.exe」プロセスを再起動するか、ログアウトして再度ログインするか、再起動するのが最も簡単です。 基本的に、環境変数をリロードするようにエクスプローラーに指示するだけです。インストーラーなど、開発したアプリケーションの場合は、呼び出していることを確認してくださいSendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
。これにより、エクスプローラーは環境変数のキャッシュを更新するように指示されます。
別のプロセスによって起動されたアプリケーションは、親から環境変数を継承するため、これは重要です。そのため、エクスプローラーからcmdを起動すると、エクスプローラーが変数を表示するときに変数を取得します。
Windowsでマスター環境を設定および取得することは、BartPEの人々がかなりの時間を費やしたことです。
メイン環境はレジストリに保存されますが、エクスプローラシェルはこれをそのアドレスに読み取ります。ここから、各cmd.exeセッションに送信されます。
SETはcmd環境のみに影響します。SETXを使用すると、マスター環境を変更できますが、設定はローカル環境には反映されません。
Frank WestlakeのCONSETおよび4NTはレジストリからエントリを取得できますが、特にマスター環境用のスイッチはありません。
通常読み込まれたウィンドウはレジストリへの設定を追跡しますが、minint(つまりWinPE)から読み込まれたウィンドウはそれを行いません。したがって、レジストリの設定とレジストリの読み取りは両方で機能しますが、通常は起動されたウィンドウのみが設定を確認し、新しいcmd、exeプログラムに渡します。
これは、環境変数を「設定」する場所によって異なります。あなたのbashの例と同等のものは次のようになります:
ファイル:env.bat
set FOO=bar
そして今、あなたはそれをリフレッシュします
% call env.bat
しかし、あなたはwindows-system-settings-dialog(またはその名前は何でも)を介してそれをやったと思います。この結果、実際にレジストリを変更したことになります。これらのレジストリ設定は、新しいプロセスを起動するとプロセスにマップされます。
そのため、新しいプロセス(場合によってはcmd.exe)を開始するか、必要な変更を反映したレジストリキーを読み取ることができます。また、レジストリから環境を取得し、現在の環境の調和を変更する小さな.bat / .cmdスクリプトを作成することもできます(気分が悪い場合は、昼食後にこれを行います)。
これは非常に簡単になり、シェルを再起動する必要はありません。
RefreshEnv.bat
RefreshEnv.bat
新しく追加された環境変数が新しいCommand / Powershellインスタンスで利用できることを確認し、更新を確認します。