我正在尝试弄清楚如何在循环中测试函数调用的返回值,并在函数返回特定值时中断循环。
下面的批处理脚本是我的尝试,该函数在前两个函数调用中返回期望值。在循环内进行调用时,我无法弄清楚如何测试返回值。请为我指出如何在循环中测试函数返回值的方向。
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
答案 0 :(得分:4)
我看不到您的循环有任何问题,但是您的功能有问题。
您只需要将最后一行更改为(引号是新的):
EndLocal & SET "%2=%var%" & GOTO :eof
在没有引号的情况下,您总是在返回值后附加一个空格,
因此IF !rtn! == 0 (
始终为假