标题: [网络连接] [已解决]批处理如何取得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
- @echo off
- setlocal EnableDelayedExpansion
- set a=0
- for /f "skip=20 tokens=1" %%i in ('ipconfig/all') do (
- if "!a!"=="0" (echo 备用DNS为:%%i) else (echo.>nul)
- set /a a=!a!+1
- )
- pause
复制代码
通用性不大,或许只能在你本机上运行吧
作者: 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
- :end
- del a.txt
- 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=就很可能需要重新修改。
仅用于“开始”-“运行”中:- 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:- @echo off
- 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%:- @echo off
- 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
- :hanye
- echo.DNS Servers 2:%s%&pause
复制代码
显示dhcp、dns1、dns2:- @echo off
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&set d&pause&exit
- 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
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims= " %%i in ('ipconfig /all') do (
- set str=%%i
- set str=!str:~0,1!
- if !str! lss 255 echo. %%i
- )
- pause
复制代码
偷机取巧的,不知道可以不。应该是还要显示192.168.0.1
[ 本帖最后由 sgaizxt001 于 2010-4-18 07:46 编辑 ]
作者: hanyeguxing 时间: 2010-4-18 08:18
- @echo off
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&set d&pause&exit
- 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 |