当通过batch file运行tracert命令时,请查找“请求超时”

我必须检查多个IP地址。 所以,我做了一个batch file来获得所有的ip结果,如下所示。

@echo off if exist D:\tracert\computers.txt goto Label1 echo. echo Cannot find d:\tracert\computers.txt echo. Pause goto :eof :Label1 for /f %%i in (d:\tracert\computers.txt) do call :trace %%i notepad D:\tracert\%1.txt goto :eof :trace echo Tracing %1 tracert -h 200 %1 >> D:\tracert\testing.csv 

computers.txt文件中,我将所有ip一行一行地写入。

上面的代码没有问题,我可以正确地得到结果。 但是,问题是,我无法尝试查找Request time out. 当我运行tracert命令。

我想查找Request time out. 如果find了,我想停止当前的tracert命令,并把结果写入一个文件,然后再循环下一个ip。 如果没有find,只将结果写入文件。

我想这样做的主要原因是因为我想减less运行此batch file时所花费的时间。

所以,我改变这样的代码,但它不起作用。

 :trace echo Tracing %1 tracert -h 200 %1 if find /c /i "Request time out." GEQ 0 ( echo %1>>D:\tracert\%1.txt goto :Label1 ) else ( echo %1>>D:\tracert\%1.txt ) notepad D:\tracert\%1.txt 

我不确定如上所示我可以search,因为我在批处理新手。 我非常感谢任何build议。

这里有一个想法, 只是为了解决这个问题,并且find字符串是正确的

 :trace echo Tracing %1 tracert -h 200 %1 | find /i "Request time out" && ( >>D:\tracert\%1.txt echo %1) || (>>D:\tracert\%1.txt echo %1 goto :Label1) start D:\tracert\%1.txt 

你真的应该学会使用双引号来保护字符串/变量的内容,但这是超出了你的问题的范围,所以没有被触动。

你需要确保你的拼写正确,否则你不会找到字符串。 注意timed d

 @echo off :trace echo Tracing %1 tracert -h 200 %1 | find /i "Request timed out" >>%1.txt 

其次,IP将始终返回一个有效的IP或从Request开始的东西。 所以这也会起作用。

 @echo off :trace echo Tracing %1 tracert -h 200 %1 | find /i "Request" >>%1.txt 

因此,它会回应hostname01.txt的内容将是:

2 * * *请求超时。

3 * * *请求超时。