web-dev-qa-db-ja.com

ユーザー固有の環境変数とは別にグローバル環境変数をリストする方法は?

Windows(バージョン10など)では、次のコマンドを使用して環境変数を一覧表示できます

set

すべてのユーザーに対して同じである環境変数だけ、または現在のユーザーまたはセッションのための環境変数だけをどのようにリストしますか?

12
RedGrittyBrick

状況は、マイクロソフトが時々見かけるよりも少し複雑です。

環境変数の多くはレジストリに保存されています。つまり、regコマンドを使用してクエリを実行できます

すべてのユーザーに共通

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

現在のユーザーセッションに固有

reg query HKCU\Environment
reg query "HKCU\Volatile Environment"

ユーザーが設定

setx variable valueコマンドを使用して独自の環境変数を永続的に設定した場合、それはレジストリに保存されますが、すぐには利用できません。

C:\>setx test removeme

SUCCESS: Specified value was saved.

C:\>reg query "HKCU\Environment"

HKEY_CURRENT_USER\Environment
    Path    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    TMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    test    REG_SZ    removeme

set variable=valueコマンドを使用すると、変数はすぐに使用できますが、レジストリには保存されません。 regで表示されますが、setコマンドを使用してそれらをリストすることはできません。これらの一時的な環境変数は、コマンドプロンプトセッションを終了した後は保持されません。

動的環境変数

この方法でレジストリに格納されない環境変数のように機能する構成体があります。例えば:

echo %TIME%
16
RedGrittyBrick

バッチコマンドを入力します:echo%temp%

「temp」環境変数に「H:\ Users\amacm\AppData\Local」が含まれている場合、Windowsはすぐに次のように応答します。

H:\ Users\amacm\AppData\Local

「temp」という名前の環境変数がない場合、Windowsは次のように応答します。

%temp%

1
Art McDonald

余分な行や空白のないきれいな出力を得るには、_cmd.exe_で次のコマンドを使用します。

ユーザー環境変数:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query HKCU\Environment') DO @echo %G=%H %I

グローバル(システム)環境変数:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"') DO @echo %G=%H %I

Windows 7-10で動作し、おそらく以前のバージョンでも動作します。

1
maoizm