无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3996|回复: 5
打印 上一主题 下一主题

探测dns 畅通的cmd脚本

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-21 18:51:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 编辑 ]
2#
 楼主| 发表于 2012-1-21 19:06:04 | 只看该作者
要只检查第一个 DNS ,就简单多了。一句话就可以解决。p处理都不用编。

for /f "delims=: tokens=2" %c in ('ipconfig /all^| find /i "dns servers"') do (@ping %c -t)

[ 本帖最后由 dos时代菜鸟 于 2012-1-22 09:18 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2012-1-22 09:15:48 | 只看该作者
利用 wmic 的 nicconfig 别名功能,实现这个目的会更简单一些
涉及命令: wmic /setlocal /echo /for /if /errorlevel /set /goto /findstr /ping

--------------------代码:--------
@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
title 检测 DNS 畅通情况...
echo 正在获取 DNS 设置....
echo.
for /f "skip=1 delims=} tokens=1" %%c in ('wmic nicconfig get DNSServerSearchOrder') do (
  set "l1=%%c"
  set "l1=!l1:{=!"
  for %%x in (!l1!) do call:p %%~x
)
echo 检测完毕,按任意键退出! & pause >nul
GOTO :eof
:p
ECHO 检测网路 %1..........
ping %1 -n 3 >nul
if not errorlevel 1 (echo DNS:[%1] 畅通!) else (echo DNS:[%1] 不通!)
ECHO.


[ 本帖最后由 dos时代菜鸟 于 2012-1-22 09:18 编辑 ]
回复

使用道具 举报

4#
发表于 2012-1-22 10:25:55 | 只看该作者
支持并欣赏一下,新年快乐了!


另外请教一个问题
  1. @echo off
  2. color 4f
  3. ::=================================================================================================
  4. set ph=%~sdp0
  5. title=%ph%
  6. for /f "tokens=2,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Security Client" /v "InstallLocation"') do (
  7. set MSEinstall=%%j
  8. )
  9. ping 127.0.0.1 -n 2 >nul
  10. :start
  11. title (*^__^*)
  12. cls
  13. set select=
  14. set /p select=【选择M将下载离线更新包,选择U调用命令行更新程序】:
  15. if /i "%select%"=="M" (
  16. goto select
  17. ) else (
  18. if /i "%select%"=="U" (
  19. goto up
  20. ) else (
  21. goto start
  22. )
  23. )
  24. :up
  25. title %MSEinstall%\Antimalware\MpCmdRun.exe
  26. "%MSEinstall%\Antimalware\MpCmdRun.exe" -SignatureUpdate
  27. msg %username% "命令行方式更新结束"
  28. ping 127.0.0.1 -n 3 >nul
  29. goto start
  30. ::====================================================================================================
  31. :select
  32. set sa=NA
  33. set ss=NA
  34. if not exist "%ph%mpam-fe.exe" (goto s1) else (goto s2)
  35. goto start
  36. :s1
  37. cls
  38. set /p sa=【选择y返回,其他键将下载更新包】:
  39. if /i "%sa%"=="y" (goto start) else (goto pack)
  40. goto s1
  41. :s2
  42. cls
  43. echo 下载结束或mpam-fe.exe已存在
  44. set /p ss=【选择y将重新下载离线更新包,其他键安装更新包】:
  45. if /i "%ss%"=="y" (
  46. del /f /a /q "%ph%mpam-fe.exe"
  47. ping 127.0.0.1 -n 2 >nul
  48. goto pack
  49. ) else (
  50. goto setup
  51. )
  52. goto s2
复制代码


reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Security Client" /v "InstallLocation"
如果不存在上面的注册表键值会在批处理中显示错误,怎么样屏蔽这个错误?

[ 本帖最后由 freesoft00 于 2012-1-22 10:29 编辑 ]
回复

使用道具 举报

5#
 楼主| 发表于 2012-1-22 11:36:15 | 只看该作者

回复 #4 freesoft00 的帖子

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Security Client" /v "InstallLocation"   2^>nul

看看能用不。

[ 本帖最后由 dos时代菜鸟 于 2012-1-22 11:39 编辑 ]
回复

使用道具 举报

6#
发表于 2012-1-22 13:49:31 | 只看该作者
我开始加的是>nul 2>nul,为什么就不行呢,运行后一闪而过。而你这个就可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-16 20:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表