【问题标题】:Set environment in current cmd using batch script使用批处理脚本在当前 cmd 中设置环境
【发布时间】: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


【解决方案1】:

“批处理文件具有简单的 set 和 setx。当批处理文件从命令提示符处执行时,它会打开一个新实例并运行 bat。因此 env 更改不会在主 cmd 上设置。”

setsetx 在运行批处理文件的命令提示符下均不生效。

  • set 仅适用于当前命令提示符(这是属于批处理文件的命令提示符不是运行批处理文件的命令提示符)。当批处理文件终止时,这些更改将丢失。

  • setx 仅影响 new 命令提示符(而不是那些已经打开的命令提示符,如用于运行批处理文件的提示符。如果您启动一个全新的命令提示符。

您需要做的是拥有一个单个批处理文件,该文件使用set,并且启动您的应用程序。

您可以从How to Use a Batch File to Create a Command Prompt Menu to Execute Commands 之类的内容开始,然后在调用每个应用程序之前添加适当的set 命令。

ECHO OFF
CLS
:MENU
ECHO.
ECHO ...............................................
ECHO PRESS 1, 2 OR 3 to select your task, or 4 to EXIT.
ECHO ...............................................
ECHO.
ECHO 1 - Open Notepad
ECHO 2 - Open Calculator
ECHO 3 - Open Notepad AND Calculator
ECHO 4 - EXIT
ECHO.
SET /P M=Type 1, 2, 3, or 4 then press ENTER:
IF %M%==1 GOTO NOTE
IF %M%==2 GOTO CALC
IF %M%==3 GOTO BOTH
IF %M%==4 GOTO EOF
:NOTE
cd %windir%\system32\notepad.exe
start notepad.exe
GOTO MENU
:CALC
cd %windir%\system32\calc.exe
start calc.exe
GOTO MENU
:BOTH
cd %windir%\system32\notepad.exe
start notepad.exe
cd %windir%\system32\calc.exe
start calc.exe
GOTO MENU

来源Display, set, or remove CMD environment variables

永久更改

使用 SET 命令所做的更改不是永久性的,它们适用于 仅当前 CMD 提示,并且仅保留到 CMD 窗口出现 关闭。要在命令行永久更改变量,请使用 SetX 或使用 GUI - 控制面板 |系统 |环境 |系统/用户 变量

使用 SetX 永久更改变量不会影响任何 CMD 已经打开的提示。只有新的 CMD 提示才会得到新的 设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2023-03-06
    • 2011-10-10
    • 2018-08-08
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多