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

Function 批处理-如何从批处理文件返回值?,function,batch-file,return,Function,Batch File,Return,我知道如何从同一批处理文件中的函数返回值,但在从不同批处理文件返回值时发现了一些问题。以下是一个例子: 文件1.cmd SETLOCAL ENABLEEXTENSIONS SETLOCAL ENABLEDELAYEDEXPANSION set number=1 call 2.cmd echo. %number% ENDLOCAL exit /B SETLOCAL ENABLEEXTENSIONS SETLOCAL ENABLEDELAYEDEXPANSION ENDLOCAL &

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

文件
1.cmd

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

set number=1
call 2.cmd

echo. %number%

ENDLOCAL
exit /B
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

ENDLOCAL & set number=2
exit /B
文件
2.cmd

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

set number=1
call 2.cmd

echo. %number%

ENDLOCAL
exit /B
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

ENDLOCAL & set number=2
exit /B

输出仍然是1。有什么解决办法吗?

我很难正确解释,但两者的结合

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
2.cmd
文件中,会导致变量计算延迟


如果其中一个单独启用,
%number%
仍应设置为2,但同时,
%number%
将设置为1。

LittleByTables位于正确的轨道上

使用两个SETLOCAL但仅使用1个ENDLOCAL会导致设置变量,但随后会丢失定义,因为当批在退出/B时退出时,会有一个额外的隐式ENDLOCAL。每当批或函数终止时,所有SETLOCAL都会结束。在设置值之前,代码只需要额外的ENDLOCAL

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

ENDLOCAL & ENDLOCAL & set number=2
exit /B
但由于默认情况下总是启用扩展,因此需要启用扩展的情况非常罕见。您应该能够删除SETLOCAL ENABLEEXTENSIONS并使用单个ENDLOCAL

如果出于某种原因您确实需要启用扩展,那么您可以在单个SETLOCAL上使用这两个选项,并且仍然只需要一个ENDLOCAL

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

ENDLOCAL & set number=2
exit /b

谢谢,没有SETLOCAL和ENDLOCAL at 2.cmd代码,它可以工作:)