我知道如何从同一个批处理文件中的函数返回值,但我发现从不同的批处理文件返回值时存在一些问题。下面是一个例子:
文件 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,有什么解决办法吗?
最佳答案
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
关于function - 批处理 - 如何从批处理文件中返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018328/