【发布时间】:2016-09-21 21:21:15
【问题描述】:
为什么CMD.exe终止时下面的批处理文件不保留变量
@echo off
cmd /c "set var=hi"
if defined var (echo var is defined ("var=%var%")) else (echo var isn't defined)
pause
exit
有什么方法可以使用 CMD /c,同时保留变量?为什么 CMD /c 不保留变量?
【问题讨论】:
-
你为什么使用
cmd /c "set var=hi"?这将在子流程中创建变量,并且变量将随之消失。 -
感谢您使用 MCVE(说真的,这在这个标签上非常罕见),但您到底为什么要设置这样的变量?
-
@SomethingDark,这只是一个例子。在实际使用中,我会在批处理文件中执行
call cmd /c "%~0",然后当批处理文件退出时,它将返回到主脚本。这是我能想到的“阻止”批处理文件终止自身的唯一方法。此外,如果 CMD /c 保留变量,那么它将允许脚本的其余部分访问它设置的变量。长解释soz -
既然
%0是批处理文件本身,为什么不只是call "%~0"? -
@SomethingDark 如果批处理文件崩溃,例如。将 |& 放入批处理文件,然后它只是终止父窗口,即使它已被调用。如果您使用
call cmd /c "%~0",它只会终止子 CMD 进程,而不是父进程。如果你明白我的意思,它有点沙盒
标签: variables batch-file cmd