批处理 While 循环
Batch While loop
我正在尝试创建一个 While(server not reachable) 循环。批处理文件里没有while
,但是用goto
就可以了。所以我有一些代码正在检查服务器是否可以访问,如果不能访问,它将在 5 秒后重试。如果可以访问,它将重新启动服务器。
这是我尝试过的:
: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!
)
)
它总是打印 "GOTO NOT WORKING!" 但这怎么可能呢?我也试过 "goto :loop",但它也不起作用...
之后我尝试了一个简单的无限循环:
:loop
echo TEST
GOTO loop
这是有效的...为什么?!没有 If 表达式也一样...
也许试试:
: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 循环是否有问题,但没有它和一个空白变量它会工作。
: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 ...
)
我正在尝试创建一个 While(server not reachable) 循环。批处理文件里没有while
,但是用goto
就可以了。所以我有一些代码正在检查服务器是否可以访问,如果不能访问,它将在 5 秒后重试。如果可以访问,它将重新启动服务器。
这是我尝试过的:
: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!
)
)
它总是打印 "GOTO NOT WORKING!" 但这怎么可能呢?我也试过 "goto :loop",但它也不起作用...
之后我尝试了一个简单的无限循环:
:loop
echo TEST
GOTO loop
这是有效的...为什么?!没有 If 表达式也一样...
也许试试:
: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 循环是否有问题,但没有它和一个空白变量它会工作。
: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 ...
)