2017-09-26 113 views
1

我必须检查多个IP地址。所以,我做了一个批处理文件来获得所有的ip结果,如下所示。通过批处理文件运行tracert命令时,请查找“请求超时”

@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线路。

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

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

我想这样做的主要原因是因为我想减少运行此批处理文件时所花费的时间。

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

: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 

我不知道我可以像上面那样搜索,因为我是批量新手。 我非常感谢任何建议。

回答

1

这里有一个想法,只为修复和受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 

你真的应该学会使用双引号保护字符串/变量的内容,但这是外你的问题的范围如此不变。

+0

非常感谢您的回答。但是,我无法在'.txt'文件中获取tracert结果。它只显示IP地址。 – Cloud

0

您需要确保拼写正确,否则您将找不到字符串。注意dtimed

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

其次,IP总是会返回一个有效的IP或东西开始请求。所以这也会起作用。

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

因此,它将回声到hostname01.txt内容将是:

2 * * *请求超时。

3 * * *请求超时。