标题: [网络连接] 批处理如何让程序发现某个关键词时自动停止执行以下代码? [打印本页]
作者: fenglin124 时间: 2010-3-25 20:29 标题: 批处理如何让程序发现某个关键词时自动停止执行以下代码?
我做了个批处理程序,代码如下: (我的意图并不是要显示局域网内的不活动主机,而是有其它用,请按要求给出代码,谢谢)
ping 127.0.0.1 -n 1
ping 127.0.0.2 -n 1
ping 127.0.0.3 -n 1
ping 127.0.0.4 -n 1
…………
…………
程序是这样一直往下的很多条,我想让程序实现这样的功能:如果输出结果中出现 Request timed out 时,程序停止往下执行,并且显示出执行结果中包含此关键词的那条命令。比如说:执行ping 127.0.0.4 -n 1这条命令时,结果是 Request timed out ,那么屏幕上显示出ping 127.0.0.4 -n 1。要实现这样的功能需要对程序做什么样的修改,请各位指教。
[ 本帖最后由 fenglin124 于 2010-3-25 21:07 编辑 ]
作者: zjw767676 时间: 2010-3-25 20:41
不知所言!!!!!!!!!!!!
作者: 523066680 时间: 2010-3-25 20:50
下面是用来临时刷出域内实际存在的那些IP的。
我觉得手法会类似。
当执行的结果出现 Lost=1 也就是失败的时候 不显示该地址
相反则显示那个地址。- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,250) do (
- for /f "tokens=*" %%b in ('ping 192.168.1.%%a -n 1 -l 1 -w 1 ^|find /i "Lost"') do (
- set now=%%b
- set "now=!now:*Lost=!"
- if "!now:1=!"=="!now!" (echo 192.168.1.%%a is on line) else (echo 192.168.1.%%a=NO)
- )
- )
- exit
复制代码
[ 本帖最后由 523066680 于 2010-3-25 20:55 编辑 ]
作者: fenglin124 时间: 2010-3-25 21:50
这个代码烦了我很长时间了,希望各位帮我一下
作者: 523066680 时间: 2010-3-25 23:02
不会吧 ,无视我的存在,一定是我理解错了题意。 我闪。
作者: bat007 时间: 2010-3-25 23:27
- @echo off
- for /l %%a in (1,1,255) do (
- ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.%%a
- )
复制代码
作者: x9tiancmd 时间: 2010-3-26 11:08
原帖由 bat007 于 2010-3-25 23:27 发表
请教楼上
@echo off
>nul 2>&1
)
这个2>&1 === 2>nul 吗?
作者: bat007 时间: 2010-3-26 11:22 标题: 回复 7楼 的帖子
对于普通用户来说,使用效果上没有什么不同。
在系统实现上来说,两者在句柄的复制及重定向上面有差别。
推荐使用2>&1
作者: fenglin124 时间: 2010-3-28 12:02
原帖由 bat007 于 2010-3-25 23:27 发表
@echo off
for /l %%a in (1,1,255) do (
ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.%%a
)
这个方法不错,但在这个上能不能实现这样:%%a取一位数时,写出来的是000而不是0,比如说是ping 127.0.0.000 ,而不是ping 127.0.0.0 。取1时是ping 127.0.0.001 ,而不是ping 127.0.0.1 。请各位指教。
作者: bat007 时间: 2010-3-28 13:35 标题: 回复 9楼 的帖子
这样做的目的是什么?为什么要把IP地址写成那个样子?
作者: fenglin124 时间: 2010-3-28 16:57
能这样做吗?我有别的用处么。谁能帮我一下。
作者: bat007 时间: 2010-3-28 21:11 标题: 回复 11楼 的帖子
这个太简单了。你为什么不愿意说出真实用途呢?
作者: fenglin124 时间: 2010-3-28 21:21
是这样的,我做的这个程序窗口大小是定的,刚好是最后一位全是三位的这个尺寸,我会做批量的PING,特别要求格式整齐。你能告诉我这个怎么做吗?
作者: bat007 时间: 2010-3-28 21:23 标题: 回复 13楼 的帖子
把你现在的代码贴出来看看?
作者: fenglin124 时间: 2010-3-28 21:32
@echo off
for /l %%a in (1,1,255) do (
ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.%%a
)
作者: bat007 时间: 2010-3-28 22:01 标题: 回复 15楼 的帖子
你这个代码在哪里体现了“这个程序窗口大小是定的”?
作者: bat007 时间: 2010-3-28 22:04
- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1001,1,1255) do (
- set ip=%%a
- set ip=!ip:~-3!
- ping 127.0.0.!ip! | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.!ip!
- )
复制代码
作者: fenglin124 时间: 2010-3-29 10:53 标题: 代码完善问题
引用:@echo off
for /l %%a in (1,1,255) do (
ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.%%a
)
如何让这段代码实现这样的功能:%%a取一位数时,写出来的是000而不是0,比如说是ping 127.0.0.000 ,而不是ping 127.0.0.0 。取1时是ping 127.0.0.001 ,而不是ping 127.0.0.1,后面的依此类推 。请各位指教。
作者: hfg1977 时间: 2010-3-29 11:08
还是变量截取问题,如下:
@echo off
setlocal enabledelayedexpansion&cls
for /l %%a in (1,1,255) do (
set "NUM=000%%a"
ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.!NUM:~-3!
)
作者: fenglin124 时间: 2010-3-31 21:21
这个不行啊,显示的还是忽略了前面的0了
作者: bat007 时间: 2010-3-31 23:25 标题: 回复 20楼 的帖子
把17楼代码的运行结果贴出来看看
作者: fenglin124 时间: 2010-4-1 14:13 标题: 17楼的运行结果显示如下
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
作者: bat007 时间: 2010-4-1 20:40 标题: 回复 22楼 的帖子
把@echo off删掉,再运行一遍,看看结果。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |