Как получить значение возврата из функции в цикле? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь выяснить, как проверить возвращаемое значение вызова функции в цикле и прерывает цикл, если функция возвращает определенное значение.

Следующий пакетный скрипт - моя попытка, функция возвращает ожидаемое значение при первых двух вызовах функции. Когда вызов сделан внутри цикла, я не могу понять, как проверить возвращаемое значение. Пожалуйста, укажите мне, как проверить возвращаемое значение функции в цикле.

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 голосов
/ 03 июля 2018

Я не вижу никаких проблем с вашей петлей, но с вашей функцией.
Вам нужно только изменить последнюю строку на (новые цитаты):
EndLocal & SET "%2=%var%" & GOTO :eof

Без кавычек вы всегда добавляете один пробел к возвращаемому значению,
следовательно, IF !rtn! == 0 ( всегда было ложным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...