|
原帖由 jasonwang 于 2006-10-20 09:21 发表
@echo off
for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i ^"reply^"') do set IP=%%i
set IP=%IP::=%
echo %IP%
pause
能讲讲是什么意思吗?DOS学的好菜啊。
for 我就不说了,本区就有不少介绍 for 的。
ping www.sina.com.cn -n 1,表示 ping 一下 www.sina.com.cn 的所在服务器,-n 1 意思为只提交一次请求。得到的运行结果如下:
- C:\>ping www.sina.com.cn -n 1
- Pinging jupiter.sina.com.cn [61.172.201.194] with 32 bytes of data:
- Reply from 61.172.201.194: bytes=32 time=6ms TTL=244
- Ping statistics for 61.172.201.194:
- Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
- Approximate round trip times in milli-seconds:
- Minimum = 6ms, Maximum = 6ms, Average = 6ms
复制代码
很显然,虽然我们得到了服务器的 IP 地址,但却无法单独将他们提取出来并赋值到一个变量。于是我用了下面的命令
ping www.sina.com.cn -n 1|find /i "reply"
这样的话,只会得到含有字符串 Reply 的那一行,因为这一行里面存在 IP 地址嘛!运行后的结果如下:
- C:\>ping www.sina.com.cn -n 1|find /i "reply"
- Reply from 61.172.201.194: bytes=32 time=7ms TTL=244
复制代码
for /f "tokens=3" %i ... 是用来提取上面的运行结果中的第三个符号,默认的分隔符为空格,这样的话,我们得到的变量 %i 的值就是 61.172.201.194:。
由于我们需要求得单纯的 IP,但是偏偏这里存在一个冒号“:”,得想办法将它去掉啊,下面的命令就是干这个的:
set IP=%IP:=%
这样的话,得到的变量 %IP% 的值就是去掉了冒号“:”的纯 IP 字符串了。但是由于冒号“:”是一个特殊的字符串,命令本身含有一个冒号“:”,我们用两个冒号“::”即可实现。
同样地,前面的查找 Reply 的语句中出现的引号“"”也是特殊字符,还有在它前面出现的管道符“|”也是特殊字符,我们需要按照微软的要求,在这些字符的前面加上一个控制符“^”。
要在批处理使用 % 的话,也要用两个 %% 表示,但是注意,这个批处理中的 %% 用法不是这样的,是因为 %i 在批处理中本身有其它定义,直接在命令中执行的话,%i 就可以表达,但是在批处理中执行时,为了让它跟原本 %i 在批处理中的定义区别开,需要用 %%i 表示。
好了,我说完了。有不准确的地方,还请大师们指正! |
|