cmd.exe的环境变量存储在哪里?

时间:2019-06-06 12:43:40

标签: windows cmd

我知道如何在Windows 10计算机上查找环境变量。

但是,当我在cmd.exe中运行set并在cmd.exe中运行set ENV_VAR=val命令时,还会列出其他变量,它会存储执行的其他环境变量。 似乎与全局和用户环境变量存储在同一位置。

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

这些存储在哪里?

3 个答案:

答案 0 :(得分:2)

cmd.exe shell动态创建了一些伪变量。这些不是静态定义的。我不知道HTTP_PROXY。

CD
RANDOM
DATE
TIME
ERRORLEVEL

其他受系统控制。改变它们不会带来任何好处。

APPDATA
SystemRoot
USERDNSDOMAIN

答案 1 :(得分:1)

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

在登录时创建环境变量,并将其传递到Shell Explorer.exe。从现在开始,它们仅在内存中。资源管理器将启动任何程序,包括cmd.exe会获取资源管理器的环境内存的副本。如果从cmd.exe启动程序,它将获取CMD环境内存的副本。程序无法访问其他程序的内存,因此这只是一种方法。如果程序更改了变量,则只能看到该程序或更改后启动的程序。程序退出时,程序的内存块将被丢弃。

如果更改了环境,SetX会通知所有程序。但是,唯一可以侦听此问题的程序是Explorer.exe。 CMD不收听此消息。有关如何执行的操作,请参见https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-settingchange。因此,在使用SetX或您的程序发送消息之后,由Explorer启动的新程序(包括CMD.exe)将进行更改。现有程序不会。现有程序将以其旧环境块的副本启动其他程序。

一个常见的问题是如何运行setx并使其立即生效。答案是你做不到。因此,您将在未来运行Setx,并在当前CMD.exe实例中运行Set

答案 2 :(得分:0)

请注意:当您在命令提示符下启动SET命令时,它们只会停留在您的提示符内,但是一旦关闭该提示符,它们就会丢失,因此实际上它们只是存储在RAM中命令提示符。