簡體   English   中英

cmd.exe的環境變量存儲在哪里?

[英]Where are the environment variables for cmd.exe stored?

我知道如何在Windows 10計算機上查找環境變量。

不過,也有當我運行列出其他變量set輸入cmd.exe,當我運行set ENV_VAR=val在CMD.EXE命令,它存儲了更多的環境變量似乎並不存儲在相同的位置,全球和用戶環境變量。

示例包括:APPDATA,HTTP_PROXY,SystemRoot,USERDNSDOMAIN

這些存放在哪里?

cmd.exe外殼程序會動態創建一些偽變量。 這些不是靜態定義的。 我不知道HTTP_PROXY。

CD
RANDOM
DATE
TIME
ERRORLEVEL

其他由系統控制。 改變它們不會帶來任何好處。

APPDATA
SystemRoot
USERDNSDOMAIN

https://winsourcecode.blogspot.com/2019/05/listenvironmentexe-list-system-user.html是一個程序,其中列出了System,User和Volatile變量以及生成的過程環境變量。 它還列出了幫助中詳細介紹的動態變量。

--------
System
--------
ComSpec=%SystemRoot%\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
Link=/pdb:none /MAPINFO:LINES
NUMBER_OF_PROCESSORS=4
Etc

--------
Volatile - These are set at logon
--------
LOGONSERVER=\\DESKTOP-UCDGI39
USERDOMAIN=DESKTOP-UCDGI39
HOMEDRIVE=C:
USERDOMAIN_ROAMINGPROFILE=DESKTOP-UCDGI39
Etc    

--------
User - These override system variables, and in the case of PATH are added to the system PATH
--------
MSDevDir=C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98
Etc

--------
Process - This is the combined environment from the above for the program
          Variables starting with an equals sign, such as =C:=C:\Windows are internal CMD variables
          CMD simulates a default directory per drive like MSDos. This is how it keeps track
--------
=C:=C:\Windows\System32
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DESKTOP-UCDGI39
ComSpec=C:\WINDOWS\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
HOMEDRIVE=C:
HOMEPATH=\Users\David Candy
Etc

--------
Dynamic - These are updated each time they are used
--------
CD
DATE
TIME
RANDOM
ERRORLEVEL
CMDEXTVERSION
CMDCMDLINE
HIGHESTNUMANODENUMBER

在登錄時創建環境變量,並將其傳遞到外殼Explorer.exe。 從現在開始,它們僅在內存中。 任何啟動資源管理器的程序,包括cmd.exe都將獲取資源管理器的環境內存的副本。 如果從cmd.exe啟動程序,它將獲取CMD環境內存的副本。 程序無法訪問其他程序的內存,因此這只是一種方法。 如果程序更改了變量,則只能看到該程序或更改后啟動的程序。 程序退出時,程序的內存塊將被丟棄。

如果環境發生更改,SetX會通知所有程序。 但是,唯一可以偵聽此問題的程序是Explorer.exe。 CMD不收聽此消息。 有關如何執行此操作的信息,請參見https://docs.microsoft.com/zh-cn/windows/desktop/winmsg/wm-settingchange 因此,在使用SetX或您的程序發送消息之后,由Explorer啟動的新程序(包括CMD.exe)將進行更改。 現有程序不會。 現有程序將以其現在較舊的環境塊的副本啟動其他程序。

一個常見的問題是如何運行setx並使其立即生效。 答案是你做不到。 因此,為將來運行Setx ,為當前CMD.exe實例運行Set

請注意:在命令提示符下啟動SET命令時,它們只是停留在提示符內,但是一旦關閉該提示符,它們就會丟失,因此實際上它們只是存儲在命令提示符的RAM中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM