Board logo

标题: [网络连接] [已解决]批处理如何取得ipconfig/all中的备用DNS地址? [打印本页]

作者: antony521    时间: 2010-4-17 22:40     标题: [已解决]批处理如何取得ipconfig/all中的备用DNS地址?

动态获取IP,ipconfig/all得到的文本如下:

Windows IP Configuration

        Host Name . . . . . . . . . . . . : mingtian
        Primary Dns Suffix  . . . . . . . :
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter 本地连接:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : Realtek RTL8139/810X Family PCI Fast Ethernet NIC
        Physical Address. . . . . . . . . : 00-60-4f-00-B8-BB
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 192.168.0.2
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1
        DHCP Server . . . . . . . . . . . : 192.168.0.1
        DNS Servers . . . . . . . . . . . : 218.147.135.14
                                            218.146.10.110
                                            192.168.0.1
        Lease Obtained. . . . . . . . . . : 2010年4月15日 20:25:15
        Lease Expires . . . . . . . . . . : 2010年4月16日 20:25:15
怎样获得以上文本中的备用DNS地址,也就是218.146.10.110这段.
我用这句得到的不正确,还望高手指点.
for /f "skip=21 tokens=1 delims= " %%i in ('ipconfig/all') do set dns2=%%i&echo %%i

[ 本帖最后由 antony521 于 2010-4-18 09:14 编辑 ]
作者: jcy0307    时间: 2010-4-17 23:10

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set a=0
  4. for /f "skip=20 tokens=1" %%i in ('ipconfig/all') do (
  5. if "!a!"=="0" (echo 备用DNS为:%%i) else (echo.>nul)
  6. set /a a=!a!+1
  7. )
  8. pause
复制代码
通用性不大,或许只能在你本机上运行吧
作者: skdu7e    时间: 2010-4-18 00:08

  1. @echo off&color a&title 获得备用DNS地址
  2. ipconfig /all|findstr /v ":" >a.txt
  3. findstr /v "[Win]" a.txt >a.txt
  4. cls&echo 备用DNS地址是:
  5. for /f "delims=" %%a in (a.txt) do if not "%%a"=="" goto :end
  6. :end
  7. del a.txt
  8. echo 按任意键退出…………&pause>nul
复制代码
我用ipconfig /all查询的数据结果与你给出的有些出入,这个代码,不知行不行,你试试,没成功请回复

[ 本帖最后由 skdu7e 于 2010-4-18 00:13 编辑 ]
作者: hanyeguxing    时间: 2010-4-18 00:15

原帖由 antony521 于 2010-4-17 22:40 发表
for /f "skip=21 tokens=1 delims= " %%i in ('ipconfig/all') do set dns2=%%i&echo %%i

对于skip=跳过的行数必须是固定的,他不能因为机器的不同和配置发生变化而变化,否则这样的批处理就失去了通用性和实用性。
例如,你再插一个网卡,或者网络协议发生变化,skip=就很可能需要重新修改。
仅用于“开始”-“运行”中:
  1. cmd /q/k for /F "tokens=1,2* delims=:. " %a in ('ipconfig/all') do (if defined s echo.DNS2:%a.%b.%c&pause&exit)&if /i "%a %b"=="DNS Servers" set s==
复制代码
只显示dns2:
  1. @echo off
  2. for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (if defined s echo.DNS2:%%a.%%b.%%c&pause&exit)&if /i "%%a %%b"=="DNS Servers" set s==
复制代码
提取到变量%s%:
  1. @echo off
  2. for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (if defined s set s=%%a.%%b.%%c&goto:hanye)&if /i "%%a%%b"=="DNSServers" set s=no
  3. :hanye
  4. echo.DNS Servers 2:%s%&pause
复制代码
显示dhcp、dns1、dns2:
  1. @echo off
  2. for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
  3. if defined dns1 set dns2=%%a.%%b.%%c&set d&pause&exit
  4. if /i "%%a %%b"=="DNS Servers" (set "dns1=%%c")else set "dhcp=%%c")
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-18 07:14 编辑 ]
作者: GNU    时间: 2010-4-18 00:16

你说“得到的不正确”,那你也至少说说得到的是什么啊。
作者: sgaizxt001    时间: 2010-4-18 07:44

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims= " %%i in ('ipconfig /all') do (
  4.   set str=%%i
  5.   set str=!str:~0,1!
  6.   if !str! lss 255  echo. %%i
  7. )
  8. pause
复制代码

偷机取巧的,不知道可以不。应该是还要显示192.168.0.1

[ 本帖最后由 sgaizxt001 于 2010-4-18 07:46 编辑 ]
作者: hanyeguxing    时间: 2010-4-18 08:18

  1. @echo off
  2. for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
  3. if defined dns1 set dns2=%%a.%%b.%%c&set d&pause&exit
  4. if /i "%%a %%b"=="DNS Servers" (set "dns1=%%c")else set "dhcp=%%c")
复制代码
以这个为例,for /f 解析ipconfig/all输出结果,分隔符为英文冒号、英文点和空格。
第一次循环,if 因未定义s变量而不执行,另if也因为%%a %%b不是DNS Servers而不执行,但执行set "dhcp=%%c"
一直到DNS Servers的上一行,s依然未定义,%%a %%b也不是DNS Servers,但set "dhcp=%%c"成功为变量dhcp更新到所需要的值。
%%a %%b是DNS Servers行,s依然未定义,所以第一个if 不执行,但第二个if执行set "dns1=%%c",set "dhcp=%%c"不执行。
DNS Servers下一行,if检查到dns1定义而执行set dns2=%%a.%%b.%%c&set d&pause&exit。set d显示dns1、dns2和dhcp三个变量,然后退出。
这样,就完成了以DNS Servers为中心(dns1),同时显示上一行(dhcp)、下一行(dns2)的任务。
作者: antony521    时间: 2010-4-18 09:03     标题: 回复 2楼 的帖子

在我的机器上显示为
备用DNS为NS
请按任意键继续. . .
作者: antony521    时间: 2010-4-18 09:11

原帖由 skdu7e 于 2010-4-18 00:08 发表
@echo off&color a&title 获得备用DNS地址
ipconfig /all|findstr /v ":" >a.txt
findstr /v "[Win]" a.txt >a.txt
cls&echo 备用DNS地址是:
for /f "delims=" %%a in (a.txt) do if not "%%a"=="" goto :end
...

IPconfig/all显示的结果有出入是因为我设的是动态获取IP地址,静态设置的显示结果要少几行.你的代码在我机器上显示
是备用DNS地址是:
按任意键退出…………
也就是DNS是空值。
作者: antony521    时间: 2010-4-18 09:18     标题: 回复 6楼 的帖子

你的代码在我机器上显示为:
219.146.0.130
192.168.1.1
请按任意键继续. . .
不错哦!多给出一行!
作者: antony521    时间: 2010-4-18 10:17     标题: 回复 7楼 的帖子

方法很巧妙,结果也正确。
谢谢寒夜孤星,从你的代码学到不少啊!

[ 本帖最后由 antony521 于 2010-4-18 10:35 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2