在BAT脚本完成运行后不设置导出变量的set命令

时间:2016-08-01 18:23:29

标签: batch-file cmd

如果我有这个doit.bat脚本:

@echo off
set MY_VAL=3
echo %MY_VAL%

然后:

> doit
3
> echo %MY_VAL%
3

换句话说,默认情况下,set命令会将变量保留在调用环境中。这与Unix不同,在那里你需要source一个脚本才能实现这一点。

我正在试图弄清楚如何能够做到以下几点:

  • .bat脚本中设置变量,但在脚本完成后不再将它们保留到环境中 - 也就是说,让Windows更像Unix。
  • 同时,我仍然希望为.bat脚本运行时分叉的任何环境设置这些变量 - 也就是说,相当于通过Unix export命令设置变量

有没有办法通过其他cmd命令或set的某个选项执行此操作?我搜索SO和文档,但无法找到任何东西。

1 个答案:

答案 0 :(得分:2)

==> SETLOCAL /?
Begins localization of environment changes in a batch file.  Environment
changes made after SETLOCAL has been issued are local to the batch file.
ENDLOCAL must be issued to restore the previous settings.  When the end
of a batch script is reached, an implied ENDLOCAL is executed for any
outstanding SETLOCAL commands issued by that batch script.
…

或阅读SETLOCAL: Set options to control the visibility of environment variables in a batch file

您可以使用下一个doit.bat脚本:

@echo off
SETLOCAL
set MY_VAL=3
echo %MY_VAL%