如何从循环中的函数获取值返回?

时间:2018-07-03 04:50:23

标签: batch-file cmd

我正在尝试弄清楚如何在循环中测试函数调用的返回值,并在函数返回特定值时中断循环。

下面的批处理脚本是我的尝试,该函数在前两个函数调用中返回期望值。在循环内进行调用时,我无法弄清楚如何测试返回值。请为我指出如何在循环中测试函数返回值的方向。

SET var1=2
SET var2=0
CALL :FUNC %var1 var2
ECHO var2 is: %var2%

REM ============================

SET var1=6
SET var2=0
CALL :FUNC %var1 var2
ECHO var2 is: %var2%

REM ============================

SETLOCAL EnableDelayedExpansion
SET list=1 0 3 4
FOR %%n IN (%list%) DO (
    CALL :FUNC %%n rtn
    IF !rtn! == 0 (
        GOTO DONE
    )
)
ECHO rtn is: %rtn%

: DONE
PAUSE
GOTO :eof


REM %1 is an in parameter
REM %2 is an out parameter
: FUNC
SETLOCAL EnableDelayedExpansion
SET var=%1
EndLocal & SET %2=%var% & GOTO :eof

1 个答案:

答案 0 :(得分:4)

我看不到您的循环有任何问题,但是您的功能有问题。
您只需要将最后一行更改为(引号是新的):
EndLocal & SET "%2=%var%" & GOTO :eof

在没有引号的情况下,您总是在返回值后附加一个空格,
因此IF !rtn! == 0 (始终为假