批处理 - 如何从批处理文件返回值?

时间:2012-08-18 11:53:13

标签: function batch-file return

我知道如何从同一个批处理文件中的函数返回一个值,但是我发现从另一个批处理文件返回一个值时出现了一些问题。这是一个例子:

档案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.有没有解决方案?

2 个答案:

答案 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.