我有一个从网上获得的小脚本。该脚本基本上从文件中读取信息(IP地址)并对其进行ping操作,然后将结果插入到文本文件中。这个脚本正是我需要的,但问题是我需要“路径”而不是ping,我可以在脚本中更改。问题是在路径中如果有延迟,脚本会在3分钟或5分钟内停留,具体取决于响应,然后再转移到下一个IP地址。
我想要的只是某种时间,基本上可能是20秒,无论响应是什么,都会移动到下一条记录。有人可以修改下面的脚本,以便pathping命令等待30秒,然后移动到下一行信息(独立于响应是什么)。任何提示或方向将不胜感激...谢谢。
我已检查超时-w或-p选项不起作用。
@echo off
cls
echo PathPing test in progress...
for /F %%i in (iplist.txt) do pathping %%i >> result.txt
echo .
echo .
echo Result is ready.
非常感谢。
答案 0 :(得分:0)
我知道这是一篇过时的文章,但我希望以后能为他人提供帮助。下面的脚本将从iplist.txt
文件获取每个地址,并且pathping
每个地址仅需20秒。然后,每个结果将输出到result.txt
文件中。
现在由于pathping
命令的工作方式,“停止”命令的唯一方法是终止CMD窗口本身。由于批处理代码的原因,一次不能运行两行(例如,与C ++不同),因此我们可以使用start "" cmd /C ""
命令来召唤两个新窗口。
对于每个地址,我们召集一个pathping
窗口和一个taskkill
窗口。 Taskill窗口将使用路径窗口的任务PID #
,并等待20秒才能终止。
同时,核心批处理文件将等待40秒,所有文件都将关闭并关闭。然后它将所有数据合并到result.txt
文件中。
@ECHO OFF
@SETLOCAL enableextensions enabledelayedexpansion
@TITLE PathPing from textfile, cancel request for each x after 20s.
@GOTO :Start
:Start
echo WARN: Starting PathPing Script...
echo WARN: This may take some time...
goto :PathPing
:PathPing
:: Large number is for token gathering
set /a number=123456789
for /f "delims== tokens=1,2" %%G in (iplist.txt) do (
:: Start The pathping's for each %%G
start "!number!" cmd /C "pathping "%%G" >> "!number!.outputfile""
:: Start Kill Window (Let process live for 20 seconds)
FOR /F "tokens=2" %%# in ('tasklist /v ^| find "!number!" ^| find "Console"') do set PID=%%#
start "" cmd /C "(PING localhost -n 20 >nul) & (taskkill /pid !PID! /t /f & goto :eof)"
set /a number+=1
)
:: End of FOR statement. Now copy .outputfile to one file.
:: Wait 60 Seconds for the FOR statement to finish copy there files.
PING localhost -n 30 >nul
:: DEL is optional, remove it if you don't with to over-wright text file.
If exist "%~dp0\result.txt" (goto :Del) ELSE (goto :Skip)
:Del
Del /Q "%~dp0\result.txt"
Goto :Skip
:Skip
For %%A In (*.outputfile) DO (for /f "delims== tokens=1,2" %%G in (%%A) do echo %%G >> result.txt)
:: Clean up all .outputfile files.
For %%A In (*.outputfile) DO (DEL /Q "%~dp0\%%A")
Goto :Finish
:Finish
cls
echo WARN: Result is ready.
echo(
pause
goto :eof