Board logo

标题: [网络连接] 批处理如何让程序发现某个关键词时自动停止执行以下代码? [打印本页]

作者: 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 也就是失败的时候 不显示该地址
相反则显示那个地址。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,250) do (
  4. for /f "tokens=*" %%b in ('ping 192.168.1.%%a -n 1 -l 1 -w 1 ^|find /i "Lost"') do (
  5.   set now=%%b
  6.   set "now=!now:*Lost=!"
  7.   if "!now:1=!"=="!now!" (echo 192.168.1.%%a is on line) else (echo 192.168.1.%%a=NO)
  8. )
  9. )
  10. 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

  1. @echo off
  2. for /l %%a in (1,1,255) do (
  3.     ping 127.0.0.%%a | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.%%a
  4. )
复制代码

作者: 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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1001,1,1255) do (
  4.     set ip=%%a
  5.     set ip=!ip:~-3!
  6.     ping 127.0.0.!ip! | find /i "Request timed out" >nul 2>&1 && echo ping 127.0.0.!ip!
  7. )
复制代码

作者: 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://bbs.bathome.net/) Powered by Discuz! 7.2