6

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

文件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。有什么解决办法吗?

4

2 回答 2

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
于 2012-08-18T14:31:53.183 回答
2

I'm having a hard time explaining it properly, but the combination of both

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

in your 2.cmd file are causing a delay in the evaluation of the variable.

If either is individually enabled, %number% should still be set to 2, but together, %number% will be set to 1.

于 2012-08-18T12:46:36.553 回答