我正在Windows上使用CURL创建一个在线站点检查器(告诉您它是打开还是关闭),但似乎不起作用。
我尝试在Windows上创建一个简单的脚本。首先,我使用curl检查Google,并在statusgoogle.txt文件中输出重定向。然后,我要求findstr查找句子“ Connection created”。这意味着该网站已启动。 findstr的错误代码0表示它找到了所要查找的内容。因此,如果找到了所要查找的内容,则会收到一条消息“站点已启动”。如果找不到,我将得到一个不同的错误代码,因此该消息应位于“站点向下”。
问题是: 我都收到消息。我已经尝试使用if%errorlevel%,但是它也没有用。
此外,我想要一个包含多个网站的代码,因为我正在创建一个bat脚本,该脚本实际上一次可以检查大约9个或10个网站。
curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt
if errorlevel 0 (GOTO :upwarning) else (GOTO :downwarning)
:upwarning
echo site up
:downwarning
echo site down
如果findstr找到字符串“ Connection created”,那么我应该期待一条带有“ site up”的消息。实际情况是这样的:它同时显示“站点上”和“站点下”的消息。
答案 0 :(得分:2)
经典if errorlevel 0
命令的误解之一,
转换为(如果有,请参阅帮助)
if errorlevel is 0 or greater
对于肯定的错误级别总是如此。
要么
if errorlevel 1
并反转逻辑if errorlevel 1 (GOTO :downwarning) else (GOTO :upwarning)
%errorlevel%
的当前值if %errorlevel%==0 (GOTO :upwarning) else (GOTO :downwarning)
&&/||
上使用条件执行curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt &&(GOTO :upwarning)||(GOTO :downwarning)
:upwarning
echo site up
goto :eof
:downwarning
echo site down
答案 1 :(得分:1)
问题是,在您跳到“警告”之后,其余代码仍将执行。您必须在“回声现场”之后终止脚本:
redux
curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt
if errorlevel 0 (GOTO :upwarning) else (GOTO :downwarning)
:upwarning
echo site up
goto :EOF
:downwarning
echo site down
的意思是“文件结束”。 “退出/ b”也将起作用。
答案 2 :(得分:0)
如果您能够使用PowerShell,则非常简单。
try {
Invoke-WebRequest "http://www.hp.com" | Out-Null
"Web site is up"
} catch {
"Web site is not up"
}