Цикл выполняется только один раз - PullRequest
0 голосов
/ 04 мая 2018

У меня трудные времена с реализацией этого скрипта. Понятия не имею, почему он повторяется только один раз, когда он «должен» хотя бы 3. Я обнаружил некоторые подобные проблемы на SO, так что, думаю, я чего-то не понимаю. Когда условие IF !ERRORLEVEL! equ 0 выполнено, оно печатает и echo и выходит из сценария, и мое ожидаемое поведение - повторять еще 2 раза. Кто-то знает причину и может мне немного помочь с этим?

set "modules=Module1 Module2 Module3"

SETLOCAL ENABLEDELAYEDEXPANSION
for %%i in (%modules%) do (
    set moduleName=%%i
    @echo Running !moduleName! module...
    set "moduleBootRunName=!moduleName:~6,1!"
    call :tolower moduleBootRunName
    set "moduleBootRunName=!moduleBootRunName!!moduleName:~7!"
    copy NUL > %logsTmpFile%\!moduleName!.txt
    start cmd /c "gradlew :modules:!moduleBootRunName!:bootRun --info > %logsTmpFile%\!moduleName!.txt"
    :waitForModule
    findstr /c:"Started !moduleName!" %logsTmpFile%\!moduleName!.txt > NUL
    IF !ERRORLEVEL! equ 0 (
        @echo Started !moduleName!
    ) ELSE (
        @echo Waiting for !moduleName!...
        timeout /t 5 > NUL
        goto waitForModule
    )
)
exit /b
:tolower
for %%L IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO SET %1=!%1:%%L=%%L!
goto :EOF

1 Ответ

0 голосов
/ 04 мая 2018

Непроверенные

set "modules=Module1 Module2 Module3"

SETLOCAL ENABLEDELAYEDEXPANSION
for %%i in (%modules%) do (
    set moduleName=%%i
    @echo Running !moduleName! module...
    set "moduleBootRunName=!moduleName:~6,1!"
    call :tolower moduleBootRunName
    set "moduleBootRunName=!moduleBootRunName!!moduleName:~7!"
    copy NUL > %logsTmpFile%\!moduleName!.txt
    start cmd /c "gradlew :modules:!moduleBootRunName!:bootRun --info > %logsTmpFile%\!moduleName!.txt"
    call :waitForModule
)
exit /b

:tolower
for %%L IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO SET %1=!%1:%%L=%%L!
goto :EOF

:waitForModule
findstr /c:"Started !moduleName!" %logsTmpFile%\!moduleName!.txt > NUL
IF !ERRORLEVEL! equ 0 (
    @echo Started !moduleName!
) ELSE (
    @echo Waiting for !moduleName!...
    timeout /t 5 > NUL
    goto waitForModule
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...