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