|
p_DNS2.7z
(951 Bytes, 下载次数: 76)
临时编辑了一个 探测 本机网络设置中的全部 DNS 是否畅通的脚本。总觉得还可以简化一些。大家一起研究一下吧。
涉及cmd命令:netsh / for /findstr /set /if /goto /call /echo /ping /管道 / ">"传递 / & 符号 / errorlevel应用 /SETLOCAL
本脚本理论上兼容 英文 cmd 环境。只需将中文提示翻译一下即可。
---------------------------
findstr 能否实现 找出同时具有如下特征的行?
包含冒号,被 冒号 分割的第一部分包含 " DNS " 字样,被冒号分割的第二部分 包含[0-9][.][0-9] 字样。
------------------------------------代码: ---------------
@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
rem 用 for 分析 "netsh interface ip show dns" 指令得出的结果
REM m 作为信息行数计数器
REM n 作为DNS信息块起始行标记器
rem 如果 当前行包含 冒号 时,将 n 赋值为 0
rem 并将当前行被冒号分割的第二部分信息赋值给变量 !DNS!,否则,将第一部分信息赋值给变量 !DNS!
rem 当 冒号 分割的第一部分信息中包含" DNS "字样,将 n 赋值为 M
rem 如此,当 n=0 时表示进入了一个信息模块。
REM 当 n<>0 时表示当前信息模块饱含了 dns 信息,变量!DNS!的内容可用,则调用脚本 p 段代码。
rem 脚本附带 一个参数"debug" ,当执行附带此参数时,运行过程附带显示变量 m n dns 的内容。
title 检测 DNS 畅通情况...
set /A m=0 & set /A n=0
echo 正在获取 DNS 设置....
ECHO.
for /f "delims=" %%c in ('netsh interface ip show dns') do (
set /a m=!m!+1
set l=%%c & set l=!l:"=_!
for /f "tokens=1,2 delims=:" %%f in ("!l!") do (
echo %%c | findSTR /C:":" >nul
if not errorlevel 1 (
set /A n=0 & set "dns=%%g"
ECHO %%f | findstr /C:" DNS " >nul
if not errorlevel 1 set /a n=!m!
) else ( set "dns=%%f" )
)
set dns=!dns: =!
if %1*==debug* ECHO 第*!M!*行: DNS标记=*!n!* DNS=!DNS!
if not !n!==0 call:p
)
)
echo 检测完毕,按任意键退出! & pause >nul
GOTO :eof
:p
ECHO 检测网路 !DNS!..........
ping !DNS! -n 3 >nul
if not errorlevel 1 (echo DNS:[!dns!] 畅通!) else (echo DNS:[!dns!] 不通!)
ECHO.
[ 本帖最后由 dos时代菜鸟 于 2012-1-21 19:42 编辑 ] |
|