2016-08-01 98 views
0

如果我有这样的doit.bat脚本:set命令完成运行

@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?我搜索和文档,但找不到任何东西。

+1

请仔细阅读标签信息应用标签之前!我相当肯定你没有使用MS - ** DOS **,是吗?无论如何,对于你的第一点(本地化环境),你正在寻找的命令是'setlocal'和'endlocal';所以通常在批处理文件('@echo off'下面)有一个'setlocal'命令; 'endlocal'被认为是可选的,因为在批处理文件被终止时有一个隐式的'endlocal'。对于你的第二点(分叉环境),没有本地命令来完成...... – aschipfl

回答

1
==> 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%