用于常见网络故障判断并处理,由于考虑到了多网卡的情况,所以写起来比较复杂麻烦,未完
@echo off setlocal enabledelayedexpansion title 网络故障判断 color 0a rem by sevenfal start 2016年1月27日,01:24:44 set "cho_n=输入数字选择:" set inter_all_num=0 set inter_a=0 set inter_b=0 set inter_on=0 set "pn_=4" !!ping检测次数!! rem !inter_all! 网卡条目(数字) rem !inter_on! 已启用+已连接网卡数(数字) rem !inter_%%a_a! 网卡是否禁用(已启用/已禁用) rem !inter_%%a_b! 网卡是否已连接 (已连接/已断开连接) rem !inter_%%a_name! 网卡名称(有空格的只取空格前部分) rem !inter_all_num! 总网卡数(数字) rem !inter_a! 已禁用数(数字) rem !inter_b! 已断开连接数(数字) rem !inter_on_%inter_on%! 在用的网卡名称 rem !gateway! 当前网关(路由表网关) rem %inter_on% 在用网卡数 rem inter_on_%inter_on%_des 网卡描述 rem inter_on_%inter_on%_mac 网卡mac地址 rem inter_on_%inter_on%_dhcp 是否启用DHCP(1/0) rem inter_on_%inter_on%_ip 网卡ip地址 rem inter_on_%inter_on%_mask 网卡子网掩码 rem inter_on_%inter_on%_gate 网卡网关 rem inter_on_%inter_on%_dhcp_ip 网卡DHCP服务器地址 rem ipv4_num 手动ip中ipv4地址个数 rem inter_on_%inter_on%_ip_num1 手动ip中网卡ip地址 rem inter_on_%inter_on%_mask_num1 手动ip中网卡子网掩码 rem call echo 2.%%inter_on_!inter_on!%% echo 正在获取网卡信息... echo. :::get interface::: :: :: ::! :://///////获得网卡数目信息 for /f "tokens=1,2,3,4* skip=3 delims= " %%a in ('netsh inter show inter') do call :inter %%a %%b %%d echo 【总网卡数(!inter_all_num!)个】 【已禁用数(!inter_a!)个】 【已断开连接数(!inter_b!)个】 echo. :://///////网卡信息输出,获取在用网卡数目及信息 for %%a in (!inter_all!) do ( if "!inter_%%a_a!"=="已启用" ( if "!inter_%%a_b!"=="已连接" ( set/a "inter_on+=1" set "inter_on_!inter_on!=!inter_%%a_name!" echo 网卡名称: √!inter_%%a_name! ) else ( echo 网卡名称: ×!inter_%%a_name! ) ) else ( echo 网卡名称: ×!inter_%%a_name! ) echo !inter_%%a_a! echo !inter_%%a_b! echo. ) if !inter_all_num!==!inter_a! echo 所有网卡都已禁用!按任意键打开网络连接并启用&pause>nul&ncpa.cpl&goto :eof if !inter_all_num!==!inter_b! echo 所有网卡都已断开连接!无线网卡请检查是否已连接wifi,有线网卡请检查网线是否插好。&pause>nul&goto :eof echo 当前使用!inter_on!个网卡 echo (PS:计算机可以拥有多个网卡,多个IP,但是真正在使用上外网的只有一个) echo. echo 正在获取详细信息... echo. :://///////获取ipconfig/all中的详细信息 for /l %%i in (1 1 %inter_on%) do ( set "on_=0" set "dhcp_=0" call :ipconfig_ ) :://///////获取路由表中的网关 call :get_gateway echo 基本获取已完毕,分析处理故障... echo. call :ping_ 2 if "!inter_on_%inter_on%_dhcp!"=="1" ( echo 当前使用【DHCP】模式 echo 即 Dynamic Host Configuration Protocol 动态主机配置协议 echo 由dhcp服务器^(通常路由器有此功能^)给电脑分配IP set/p=正在检测网关是否存在...<nul call :ping_ 2 if "!inter_on_%inter_on%_ip!"=="" echo.&echo 没有网关地址!请检查路由器dhcp服务设置!&start iexplore !inter_on_%inter_on%_dhcp_ip!&pause&goto :eof echo 【通过!】 set/p=正在检测DHCP获取是否正常...<nul call :ping_ 2 if "!inter_on_%inter_on%_ip:~,7!"=="169.254" echo.&echo dhcp获取错误,请检查路由器的DHCP功能是否正常&echo 家用路由器请直接重启路由器,然后检查是否电脑网线直接连接到路由器&echo 如果其中经过了交换机,请检查交换机到路由器网线是否正常&pause&goto :eof echo 【通过!】 set/p=正在检测DHCP服务器是否为路由器...<nul call :ping_ 2 if "!inter_on_%inter_on%_gate!" NEQ "!inter_on_%inter_on%_dhcp_ip!" echo.&echo !警告!网卡网关^(通常是路由器^)和DHCP服务器地址不一样!^(通常这2个是一样的^)&echo 请确认是否正常,如果不正常,表示网内出现了流氓DHCP服务器&echo 此流氓DHCP服务器地址为!inter_on_%inter_on%_dhcp_ip!&call :get_mac !inter_on_%inter_on%_dhcp_ip!&pause rem echo 【通过!】 set/p=正在检测网关是否能通讯...<nul call :ip_test !inter_on_%inter_on%_gate! !pn_! if !ip_test_ok! EQU !pn_! echo 【网关通畅!】 if !ip_test_ok! LSS !pn_! (if !ip_test_ok! GTR 0 echo 【不是很通畅】) else (echo 【网关不通!】) echo 如果【网关不通!】,家用路由器请直接重启路由器,然后检查是否电脑网线直接连接到路由器&echo 如果其中经过了交换机,请检查交换机到路由器网线是否正常 set/p=正在检测DNS是否正常...<nul ) else ( echo 当前使用【静态IP】模式 ) pause if "!gateway!" NEQ "!inter_on_%inter_on%_gate!" echo 网卡设置网关和路由表中的网关不一样! echo --!inter_on_%inter_on%! --在用的网卡名称 echo --!gateway! --当前网关(路由表网关) echo --%inter_on% --在用网卡数 echo --!inter_on_%inter_on%_des! --网卡描述 echo --!inter_on_%inter_on%_mac! --网卡mac地址 echo --!inter_on_%inter_on%_dhcp! --是否启用DHCP(1/0) echo --!inter_on_%inter_on%_ip! --网卡ip地址 echo --!inter_on_%inter_on%_mask! --网卡子网掩码 echo --!inter_on_%inter_on%_gate! --网卡网关 echo --!inter_on_%inter_on%_dhcp_ip! --网卡DHCP服务器地址 echo --!inter_on_%inter_on%_dns_ip! --网卡DNS服务器地址 pause echo 其中生效的是 rem echo 1.!inter_on_%inter_on%! pause for %%a in (!inter_all!) do ( echo !inter_%%a_a! !inter_%%a_b! !inter_%%a_name! pause call :step1 !inter_%%a_a! !inter_%%a_b! !inter_%%a_name! ) pause :://///////结束 :://///////IP信息获取 :ipconfig_ for /f "tokens=1,2,3,4,5,6,* delims=.:() " %%a in ('ipconfig/all') do ( rem echo a.%%a b.%%b c.%%c d.%%d e.%%e f.%%f if "%%b"=="!inter_on_%inter_on%!" set "on_=1" !!确定是不是待处理网卡!! if "!on_!"=="1" ( if "%%a"=="描述" set "inter_on_%inter_on%_des=%%b %%c %%d %%e %%f %%g" if "%%a"=="物理地址" set "inter_on_%inter_on%_mac=%%b" if "%%a %%b"=="DHCP 已启用" ( if "%%c"=="是" set "inter_on_%inter_on%_dhcp=1"&set "dhcp_=1" !!确定是不是DHCP!! ) if "!dhcp_!"=="1" ( if "%%a %%b"=="IPv4 地址" set "inter_on_%inter_on%_ip=%%c.%%d.%%e.%%f" if "%%a"=="子网掩码" set "inter_on_%inter_on%_mask=%%b.%%c.%%d.%%e" if "%%a"=="默认网关" set "inter_on_%inter_on%_gate=%%b.%%c.%%d.%%e" if "%%a %%b"=="DHCP 服务器" set "inter_on_%inter_on%_dhcp_ip=%%c.%%d.%%e.%%f" ) else ( if "%%a %%b"=="IPv4 地址" set "num1+=1"&set "inter_on_%inter_on%_ip_!num1!=%%c.%%d.%%e.%%f" if "%%a"=="子网掩码" set "inter_on_%inter_on%_mask_!num1!=%%b.%%c.%%d.%%e" if "%%a"=="默认网关" set "inter_on_%inter_on%_gate=%%b.%%c.%%d.%%e" ) set "ipv4_num=!num1!" if "%%a %%b"=="DNS 服务器" set "inter_on_%inter_on%_dns_ip=%%c.%%d.%%e.%%f" ) if defined inter_on_%inter_on%_dns_ip goto :eof ) goto :eof :://///////获取路由表中的网关 :get_gateway route print | findstr "\<0.0.0.0\>" >nul if !errorlevel!==1 echo 没有找到网关,现在上不去网 for /f "tokens=3 delims= " %%a in ('route print ^| findstr "\<0.0.0.0\>"') do set "gateway=%%a" goto :eof :://///////获取网卡信息 :inter for /l %%i in (1 1 9) do if not defined inter_%%i_b ( set/a "inter_all_num+=1" !!计算总网卡数!! if "%1"=="已禁用" set/a "inter_a+=1" !!计算已禁用数!! if "%2"=="已断开连接" set/a "inter_b+=1" !!计算已断开连接数!! set "inter_all=!inter_all! %%i" !!取得网卡数目表!! set "inter_%%i_a=%1" !!取得网卡禁用状态!! set "inter_%%i_b=%2" !!取得网卡连接状态!! set "inter_%%i_name=%3" !!取得网卡名称!! goto :eof ) goto :eof :://///////获取mac地址 call :get_mac ip :get_mac set "mac=0" for /f "tokens=2 delims= " %%a in ('arp -a ^| find "%1"') do if "%%a" NEQ "" (echo mac地址为%%a ) else (echo 获取不到mac地址&set "mac=1") goto :eof :://///////ping延时 call :ping_ 时间 :ping_ ping 127.1 -n %1 >nul goto :eof :://///////测试ip是否能ping通 call :ip_test ip :ip_test set "ip_test_ok=0" for /l %%i in (1 1 %2) do ( ping %1 -n 1 -w 1 if !errorlevel!==0 set "p_test_ok+=1" ) goto :eof :://///////dns解析 :nslookup_ for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com %1 ^|find "Addresses"') do set baidu1=%%a if "!baidu1!" NEQ "" call :ip_test if "!baidu1!"=="" echo 【不通过!】&set/p=DNS %i 解析存在故障,检查谷歌dns解析是否正常... for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a if "!baidu!"=="" ( echo 【不通过!】 ) goto :eof :step1 if "%1"=="已禁用" ( echo 网卡 %2 已禁用,请确认: echo 1.此网卡已手动禁用 2.不清楚 set/p step1_c=%cho_n% ncpa.cpl ) goto :eof for /f "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do ( if "%%a"=="无线局域网适配器" set wlan_name="%%b" & set wlan=0 if !wlan!==0 ( ) if "%%a"=="以太网适配器" (set lan_name="%%b" & set lan=0) else (set lan=2) if !lan!==0 ( ) ) pause :lan2 echo 请确认: echo 1.是否存在网卡(装了网卡没有?) echo 2.是否启用网卡 echo 3.退回重新检测 set/p cho_lan2=输入数字进行进一步检查:、 if "!cho_lan2!"="1" echo 请在即将打开的“设备管理器”窗口中查看“网络适配器”项中是否存在网卡&pause&start hdwwiz.cpl :wlan_
© 著作权归作者所有
下一篇: win7 arp -s 绑定失败的办法
文章评论(0)