【发布时间】:2015-06-09 18:53:06
【问题描述】:
我在发布此问题之前确实搜索了答案,但我找不到任何东西。
问题是,我有一个 CMD shell,可以从中启动不同的应用程序。我想要的是执行一个可以修改当前cmd环境的bat文件。
在我们当前的设置中,我们使用 call 来启动批处理文件,但该环境不会在调用方 cmd 环境中更新。是否有在当前 cmd shell 中运行批处理的命令?
【问题讨论】:
-
通常,从命令提示符执行的批处理文件在 cmd.exe 的当前实例中运行,有或没有
call。使用了start吗?是否使用管道?其中任何一个都可以使批处理在 cmd.exe 的新实例中执行。 -
批处理脚本中是否使用了
setlocal语句? -
No start 或 Pipe 或 setLocal 未使用。批处理文件有简单的 set 和 setx。从命令提示符执行批处理文件时,它会打开一个新实例并运行 bat。所以环境变化不会在主 cmd 上设置。
-
“打开一个新实例”是指它不仅在运行一个新的 cmd.exe 实例,而且还打开一个新的控制台窗口?
-
仅供参考,setx.exe 不会修改当前环境(子进程打开和修改其父进程是非常糟糕的做法)。相反,它会更新注册表并广播
WM_SETTINGCHANGE消息,使 Explorer 从注册表中重新加载其环境。修改后的环境仅在随后从资源管理器启动的 cmd.exe 实例中可见。需要使用内置的set命令来修改当前cmd shell的环境。
标签: windows shell batch-file cmd