2017-01-30 199 views
0

我想創建一個while(服務器不可達)循環。批處理文件中沒有while,但可以使用goto完成。所以我有一些代碼檢查服務器是否可以訪問,如果不是,它會在5秒後再次嘗試。如果可以訪問,它將重新啓動服務器。批處理while循環

這裏是我的嘗試: 「GOTO不工作」

:loop 
for /f "delims=" %a in ('curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/project/html5/') do @set status=%a 
if %status% == 404 (
    echo Server not reachable... trying again... 
    timeout /T 5 /nobreak 
    goto loop 
) else (
    if %status% == 000 ( 
     echo Server offline... trying again... 
     timeout /T 5 /nobreak 
     goto loop 
     echo GOTO NOT WORKING! 
    ) else (
     echo Server reachable! SUCCESS! 
    ) 
) 

它總是打印但這怎麼可能?我也試過「轉到:循環」,但其還沒有工作...

之後,我曾試圖用一個簡單的無限循環:

:loop 
echo TEST 
GOTO loop 

這是工作......爲什麼?它同樣沒有如果表達...

+0

你的'for'命令的參數缺少2%:'for/f「delims =」%% a in(... @set status = %% a' – Aacini

+0

也改變你的if %status%== 404' and'if%status%== 000' to'if「%status%」==「404」'and'if「%status%」==「000」'。 – Compo

回答

0
:loop  
    for /f "delims=" %%a in (' 
     curl -s -o nul -w "%%{http_code}" http://localhost:8080/project/html5/ 
    ') do set "status=%%a" 

    if "%status%"=="404" (
     echo Server not reachable... trying again... 
    ) else if "%status%"=="000" (
     echo Server offline... trying again... 
    ) else (
     echo Server reachable! SUCCESS! 
     goto :continue 
    ) 

    timeout /t 5 /nobreak 
    goto :loop 

:continue 

所做的更改:

  • 裏面的批處理文件的for替換參數需要兩個百分號,%a用於命令行,%%a裏面批次。
  • 在Windows中寫入NUL設備/dev/nul沒有使用,只是nul
  • 內批處理文件不相關變量百分號需要進行轉義,他們加倍。它必須爲「-w」%% {http_code}「
  • 完成以防萬一status未定義,最好引用if條件中的值,或者執行先前的檢查(if not defined status ...
+0

Thank you thats工作!我試圖在「A」的加倍「%」,但在HTTP_CODE忘了它...謝謝! 也很高興看到你改變了,以及如何喲你改變了代碼風格本身 – szmast3r

0

也許嘗試:

:loop 
for /f "delims=" %%a in ('curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/project/html5/') do @set status=%%a 
if not defined status echo Error, Check your Program && Pause>Nul 
if %status% == 404 (
    echo Server not reachable... trying again... 
    timeout /T 5 /nobreak 
    goto loop 
) else (
    if %status% == 000 ( 
     echo Server offline... trying again... 
     timeout /T 5 /nobreak 
     goto loop 
     echo GOTO NOT WORKING! 
    ) else (
     echo Server reachable! SUCCESS! 
    ) 
) 

我不知道如果在你的for循環是一個問題,但沒有它,一個空白的變量,將工作。