解决方法

解决方法

我正在编写一个脚本来 ping 学校内的 WAP 和交换机,它上面的一切都运行良好,除了它不会将没有响应传输到 .txt 中,因为我添加了

| FIND "TTL="


这基本上就是我的脚本,除了所有 IP 的多行内容之外

@echo off
del Test.txt
set /p var1=How many times would you like to test the connection for each device?
cls
echo Testing WAP Connections, Please Wait...
ping -n %var1% 127.0.0.1 | FIND "TTL=" > Test.txt


当我使用脚本的“FIND”部分运行脚本时,我得到了这个输出

Reply from 127.0.0.1: bytes=32 time<1ms TTL=255

但是如果我没有收到任何我 ping 的回复,它就不会在 .txt 文件中记录它。有什么方法可以让它记录失败的 ping,而不必删除:“| FIND "TTL="”?

答案1

有什么方法可以让它记录失败的 ping,而不必摆脱:“| FIND“TTL=””?

不,至少不使用微软的股票find命令。

以下是一些文档find在客户端,适用于 Windows Vista 和 Windows 8,其中部分内容如下:

如果你不使用/我寻找搜索您指定的内容细绳

由于您只能指定一个细绳寻找,没有直接的去做你想做的事情的方法。

但是,您可以用一种稍微迂回的方式来做到这一点:将输出重定向ping到临时文件,然后运行find 两次在该文件上:

ping -n %var1% 127.0.0.1 > Test.tmp
FIND "TTL=" Test.tmp > Test.txt
FIND "Request timed out." Test.tmp >> Test.txt

或者,您可以使用支持搜索多个不同字符串的工具,例如 GNU grep(适用于 Win32)。评论中指出的另一种方法是和31415而是使用findstr在 Windows 2000 和更新版本中可用的命令:

ping -n %var1% 127.0.0.1 | findstr /c:"TTL=" /c:"Request timed out."

显然,由于这两种语言都是通过查看母语输出来进行操作的,因此ping它们在非英语地区会遇到问题。

值得铭记find起源于 DOS 2.0.那是与引入目录和硬盘支持的 DOS 版本相同(DOS 1.x 仅支持使用软盘进行持久存储,并且缺乏目录的概念)。由于向后兼容性是 Microsoft 仍然非常重视的事情,因此他们无法轻易改变如何find对待细绳参数,而在 DOS 2.0 时代,内存和处理速度都非常宝贵。看来findDOS 2.x 中的 甚至不支持不区分大小写的搜索(后来通过开关添加/I)。它真的是一个神秘的实用程序,之所以幸存下来,是因为它不能轻易被其他东西取代。

答案2

解决方法

搜索.而不是TTL=

ping -n %var1% 127.0.0.1 | FIND "." > Test.txt

由于您不是在寻找特定的文本,因此此方法应该在大多数 Windows 语言环境中都有效,无需额外努力即可捕获多条错误消息。

示例输出

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Ping statistics for 127.0.0.1:

请求超时

Pinging 1.2.3.4 with 32 bytes of data:
Request timed out.
Ping statistics for 1.2.3.4:

目标主机不可达

Pinging 131.107.255.255 with 32 bytes of data:
Reply from 10.0.2.15: Destination host unreachable.
Ping statistics for 131.107.255.255:

总体故障

Pinging 127.0.0.0 with 32 bytes of data:
General failure.
Ping statistics for 127.0.0.0:

传输失败

Pinging 0.0.0.0 with 32 bytes of data:
PING: transmit failed. General failure.
Ping statistics for 0.0.0.0:

找不到主机

Ping request could not find host a.b.c.d. Please check the name and try again.

进一步阅读

相关内容