批处理文件 - 使用 ping 测试网络连通性

11

使用批处理文件,能否做到以下操作:

ping google.com

如果返回成功,则输出“您已连接到互联网”

否则,输出“您未连接到互联网”


1
这个问题没有展现出任何研究努力。 - Otto
我对Windows命令行有点陌生。为了使这些解决方案起作用,必须在errorlevel周围加上百分号。 - Elliott
9个回答

17

您可以使用以下代码片段:

@echo off
Ping www.google.de -n 1 -w 1000
if errorlevel 1 echo Not connected

4
这里有一个脚本,将重复检查并在每次网络中断时记录系统时钟的时间和“internet offline”到日志文件C:\Internet.txt中。 遗憾的是,日志文件中最新的行会出现在末尾 - 我不知道如何使它出现在顶部 ;) 顺便说一句: 我将等待时间(-w)设置为20秒,因为我正在使用3G dongle(带有2G互联网),所以20秒通常是确定互联网是否真的中断或其他问题的唯一方法...请随意更改为5000以表示5秒,或者完全删除“-w 20000”以保持默认值。
@echo off

:START

ping -n 4 4.2.2.2 -w 20000 >nul

if %errorlevel% == 1 (
  echo Internet offline >> C:\Internet.txt
  Time /t >> C:\Internet.txt
)

Timeout /t 30
@set errorlevel = 0

GOTO START

为什么在脚本末尾将错误级别设置为0? - Hunter S
我原以为每次都需要重置,否则它会永久地保持1? - jfgoodhew1

1

1
从来没有想过这个问题。但是,我不认为它会有什么问题。 - Ozair Kafray
1
@jeb:谢谢,这也是我把它放在这里的目的。我也想在我的回答中写上“Google是我们的朋友”。 - Ozair Kafray
@Chumillas:没关系。即使问题是用英语提出的。 - Naveed
@NAVEED 我认为解决方案应该覆盖所有公众。 - Otto

1
基于@CShulz的回答,这里有一个脚本,仅在没有连接时打印“未连接”,否则会每30秒静默循环测试。首先ping测试连接性,并在出现问题时打印错误消息。第二个ping通过ping本地主机添加了30秒的等待时间。
@echo off
:loop
ping www.google.com -n 1 -w 5000 > nul
if errorlevel 1 echo Not connected
ping -n 30 127.0.0.1 > nul
goto loop

1
@echo off
echo Checking connection
ping -n 1 www.google.com >nul
if errorlevel 1 (
  cls
  echo Failed
  pause>nul
  exit
)

cls
echo Success!
pause>nul
exit

0
echo Testing Internet Connection of google.com
@echo off
:loop
ping google.com -n 1 -w 5000 > nul
if errorlevel 1 echo %date% - %time% Not connected >> pingtestlog.txt
ping -n 30 127.0.0.1 > nul
goto loop

这个版本会在你运行脚本的同一文件夹中创建一个日志文件,其中包含任何断开连接的日期和时间。唯一的问题是,添加日志文件会禁用文本“未连接”在屏幕上的回显,每当发生断开连接时。但是,日志文件的存在将提醒您发生了断开连接。 - askuse7
请添加一些解释。在SO中,仅提供代码答案是不鼓励的。 - Ram Ghadiyaram

0
@echo off
:loop
ping www.google.com -n 1 -w 5000 >NUL
if errorlevel 1 echo Not connected
goto Loop

0
此基本脚本可以连续 ping google.com 并测试您的互联网连接。脚本将在循环中运行,直到您关闭窗口。
@echo off
:loop
ping www.google.com -n 1 -w 5000 > null
    if not errorlevel 1 set msg=Your are connected with internet...
    if errorlevel 1 set msg=No Internet...
cls
color 0a
echo %msg%
goto loop

0

我知道这是一个旧帖子,但我还是想做出我的贡献。

@echo off

TITLE Network Connection Watchdog

:: Use Windows "Task Scheduler".
:: Set to run at "Startup" with a delay and interval of your choice.
:: Remember to tick "Run with highest privileges".

:: Last command will only be executed if all pings fail.

set /a pc=0
set /a total=0

:: Your preferences
set if="Wi-fi" &:: Find your interface name with [netsh interface show interface].
set ip=192.168.0.1
set /a pt=10 &:: Set amount of pings to be executed.

:loop
set /a pc+=1
ping %ip% -n 1 -w 100 | find "TTL=" >NUL 2>&1
for /f %%a in ('echo %errorlevel%') do set p%pc%=%%a

set /a total+=p%pc%
if not %pc%==%pt% goto loop

if not %total%==%pt% (
goto eof
) else (
netsh interface set interface %if% disable
ping localhost -n 5 >NUL 2>&1
netsh interface set interface %if% enable
)

:eof
exit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接