windows - For loop udføres kun én gang

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har vanskelige tider med gennemførelsen af ​​dette script. Har ingen anelse om, hvorfor det gentager kun en gang, når det 'skal' mindst 3. Jeg har fundet nogle lignende problemer på så så jeg tror jeg forstår ikke noget. Når IF !ERRORLEVEL! equ 0 betingelsen er opfyldt, udskriver den og echo og afslutter script, og min forventede adfærd er at gentage 2 flere gange. Kender nogen grunden og kunne hjælpe mig med det lidt?


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

Bedste reference


uafprøvede


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
)