为什么CMD不继承这台机器上的环境变量?

为什么CMD不继承这台机器上的环境变量?

无论出于什么原因,在特定机器上,我的 cmd 进程不会从启动它的父进程继承其环境变量。相反,它会恢复为“默认”环境设置,就像它是通过资源管理器启动的一样。

演示此操作的一个简单方法是打开命令提示符,然后运行set Path=C:\Windows\System32\​​,接着cmd从同一提示符启动另一个进程。然后可以通过运行 查看该变量set Path

应该是“C:\Windows\System32”(从启动过程继承)但在我的计算机上它已恢复为我的环境默认值。

你应该看到类似这样的内容: 工作命令提示符

我得到的却是以下内容: CMD 违反规则

这可能是什么原因造成的?它似乎破坏了有关环境变量如何工作的所有规则,并且只影响这一台机器。

答案1

问题是由于命令处理器的自动运行设置。命令行的这个小“功能”允许您配置一个脚本,在每次 CMD 进程启动时运行。

就我而言,某些东西(可能是 NVMW 的安装)注册了一个脚本,该脚本分配了一个全新的Path值,完全忽略了任何现有值。

删除该HKCU\Software\Microsoft\Command Processor\Autorun值可使命令行恢复其正常行为。

答案2

使用/d选项cmd.exe从注册表中跳过自动运行命令。无需删除自动运行键。

C:\> cmd /? | findstr uto
/D      Disable execution of AutoRun commands from registry (see below)
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

更多来自cmd /?

If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        and/or

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

相关内容