我必须检查多个IP地址。因此,我创建一个批处理文件来获取所有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.
,如果找到,我想停止当前的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
我不确定我是否可以如上所示进行搜索,因为我批量处理新手。 对于任何建议,我都非常感激。
答案 0 :(得分: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
你真的应该学会使用双引号来保护字符串/变量内容,但这超出了你的问题的范围,因此保持不变。
答案 1 :(得分:0)
您需要确保拼写正确,否则您将找不到该字符串。请注意d
timed
@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 * * *请求超时。