我知道如何从同一个批处理文件中的函数返回一个值,但是我发现从另一个批处理文件返回一个值时出现了一些问题。这是一个例子:
档案1.cmd
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
set number=1
call 2.cmd
echo. %number%
ENDLOCAL
exit /B
档案2.cmd
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
ENDLOCAL & set number=2
exit /B
输出仍然是1.有没有解决方案?
答案 0 :(得分:7)
LittleBobbyTables在正确的轨道上。
您使用两个SETLOCAL但只有1个ENDLOCAL会导致设置变量,但是当定义退出EXIT / B时,定义会丢失,因为还有一个隐式ENDLOCAL。只要批处理或函数终止,所有SETLOCAL都将结束。在设置值之前,您的代码只需要一个额外的ENDLOCAL。
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
ENDLOCAL & ENDLOCAL & set number=2
exit /B
但是,由于默认情况下始终启用扩展,因此极少需要启用enableExtensions。您应该能够删除SETLOCAL ENABLEEXTENSIONS并使用单个ENDLOCAL。
如果由于某种原因你确实需要启用扩展,那么你可以在一个SETLOCAL上使用这两个选项,但仍然只需要一个ENDLOCAL
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
ENDLOCAL & set number=2
exit /b
答案 1 :(得分:2)
我很难解释它,但两者的结合
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
2.cmd
文件中的导致变量评估延迟。
如果单独启用其中之一,%number%
仍应设置为2,但%number%
将一起设置为1.