Windows循环检测,直到网络通/断后执行指定命令
前言
前几天,一个朋友让我帮他做个脚本或者批处理,要实现的功能很简单:开机时检测网络是否联通,如果联通了就执行一个指定的程序,然后脚本就可以退出了。
批处理的解决方法
手动操作时,我们通常使用ping命令来检测网络是否正常。
但我测试了一下,ping命令返回的errorlevel值很多,且有些情况即使不通,返回的也是0,因此不能直接通过errorlevel的值来判断网络是否正常!
使用ping命令来实现,需要配合find等命令,但这不重要,重要的是批处理写出来感觉不太优雅..
批处理实现代码:
@echo off
:start_ping
ping -n 1 www.baidu.com | find "ms" >nul
if %errorlevel%==0 goto run_process
ping -n 2 127.0.0.1 >nul
goto start_ping
:run_process
start "" notepad.exe
上面的代码是网络 不通->通 时执行命令,如果是想 通->不通 时执行,只需要将==0改成==1即可
PowerShell脚本的解决方法
为了代码能优雅一点,于是我写了一个PowerShell的脚本,文件名为netTest.ps1,内容如下:
#循环检测网络是否正常
do{
sleep 1
$sky = Test-NetConnection -ComputerName "www.baidu.com"
}while(!$sky.PingSucceeded)
#网络正常后要执行的命令,例如这样:
start notepad.exe
这样看上去就优雅点了~
上面的代码是网络 不通->通 时执行命令,如果是想 通->不通 时执行,删掉代码中的感叹号 ! 即可
但是,PowerShell脚本不能直接放到启动项中,可以使用批处理来调用它,批处理内容:
@echo off
powershell iex .\netTest.ps1
将两个文件放在同一个文件夹中,如图:
在 调用.bat 上点击右键,然后选择“创建快捷方式”,将创建出来的快捷方式放入“启动”文件夹即可实现开机自动检测。快速打开启动文件夹的方法:
按下Win+R键,输入以下代码后确定:
shell:startup
如图: