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

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。有解决方案吗?

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

2
我很难恰当地解释,但两者的结合
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

你的2.cmd文件中的代码导致了变量的评估延迟。

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


谢谢,没有2.cmd代码中的SETLOCAL和ENDLOCAL,它可以正常工作 :) - Charles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接