2011-10-11 07:02:21 +0000 2011-10-11 07:02:21 +0000
26
26

如何每隔X分钟进行一次ping,检查响应时间?

我目前在一家大公司工作,我们有严重的延迟问题。这发生在一个过程控制系统中,而且是不可接受的(打开一个阀门有时需要2分钟才能启动命令)

我想在网络团队说 “网络上一切正常 "的时候仔细检查。所以,我想创建一个循环,对服务器进行ping,并将结果写入一个文本文件。

我不是批处理专家,但你认为这个代码的使用是否正确?

@ECHO OFF

:LOOPSTART

time /T
ping xxx.xx.x.x -t >> filename.txt
sleep -m 3000

GOTO LOOPSTART

答案 (10)

32
32
32
2011-10-11 07:14:25 +0000

我觉得挺好的,但如果你想连续ping IP,就没必要循环。那么你可以简单地这样做。

@ECHO OFF
set IPADDRESS=x.x.x.x
ping %IPADDRESS% -t >> filename.txt

如果你想每隔X分钟ping一次,就用循环的方式。

@ECHO OFF
set IPADDRESS=x.x.x.x
set INTERVAL=60
:PINGINTERVAL
ping %IPADDRESS% -n 1 >> filename.txt
timeout %INTERVAL%
GOTO PINGINTERVAL

如你所见,我用sleep代替了timeout命令。这是因为sleep在某些系统上并不总是可用,而timeout通常是可用的。

你的系统上缺少sleeptimeout命令?别担心。只需用下面的黑客替换timeout

@ping 127.0.0.1 -n %INTERVAL% > nul

这个黑客只是简单地ping你的本地地址, 因为它会立即响应, 我们可以用它来模拟执行中的延迟.

3
3
3
2017-11-08 06:35:32 +0000

对于单行的解决方案,使用以下方法。

cmd /v /c "(for /l %a in () do @for /f "tokens=*" %b in ('ping -w 1000 -n 1 xxx.xxx.xxx.xxx ^| findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %b & timeout 3000 >NUL) > pingtestresults.txt"

注:

1.你可以用xxx.xxx.xxx.xxx 代替google.com 2.编辑间隔时间时,将3000改为60(1分钟)或10(10秒) 3.如果你需要将此命令放在批处理文件中(.bat或.cmd),那么请确保用%代替%%

1
1
1
2018-10-11 20:56:56 +0000

对于Windows的解决方案,如果你愿意安装 wtee.exe ,下面的工作将 pingloop.bat )。

@echo off
SETLOCAL

set pingTarget=yahoo.com
set fileName=pinglog.txt
set waitSeconds=420

echo. | wtee -a %fileName%
echo ====================================================== | wtee -a %fileName%
echo Starting Ping Loop; Logging to %fileName% | wtee -a %fileName%

:timestamp
set day=%date:~7,2%
set month=%date:~4,2%
set year=%date:~10,4%

set timestamp=%year%-%month%-%day%_%time%
echo. | wtee -a %fileName%
echo ------------------------------------------------------ | wtee -a %fileName%
echo Ping Timestamp: %timestamp% | wtee -a %fileName%

:ping
ping %pingTarget% -n 1 | wtee -a %fileName%

:wait
ping 127.0.0.1 -n %waitSeconds% > nul

goto timestamp

ENDLOCAL

干杯!

0
0
0
2016-06-24 16:08:41 +0000

超时开关和你要找的 “等待 "开关是不一样的。Windows ping命令的超时开关只是告诉命令窗口在收到回复前要等多久,而不是在发送下一个回复前要等多久。

0
0
0
2019-03-08 10:08:28 +0000

根据上面Sparks的回答,我把他的一行代码放在一个批处理文件中,并做了一些修改。

cmd /v /c "(for /l %%a in () do @for /f "tokens=*" %%b in ('ping -w 1000 -n 1 %1 ^| 
findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %%b & timeout %2 
>NUL) > pingtestresults.txt"

保存为PingD.bat,使用下面的代码来执行PingD [机器名/IP] [ping之间的延迟,以秒为单位]

例如PingD MyDC01 10将每隔10秒向MyDC01发送一个ping。

0
0
0
2019-10-30 02:52:47 +0000

如果你想把它粘贴到Windows的命令窗口中……

(for /l %a in () do @for /f “tokens=/*” %b in (‘ping -w 1000 -n 1 8.8.8.8 ^| findstr “Reply Request Unknown Destination”’) do @echo %b & timeout 3 〉NUL)

它每3秒ping一次…

这样做比较好,因为你不需要写到日志文件,(为什么你真的需要一个日志文件)只需要写到即时窗口,而且它能 “立即 "给你想要的结果:)

如果出于某种原因,你也可以通过这样的方式将管道输出到日志文件:(for /l %a in () do @for /f "tokens=/*” %b in (‘ping -w 1000 -n 1 8.8.8. 8 ^| findstr “Reply Request Unknown Destination”) do @echo %b & timeout 3 >NUL)>file.txt

另外,你可以通过改变'timeout'后面的值来调整timeout,因为在本例中是3秒……

而且你不必保存到批处理文件中……。只需从存储在云端保存位置的文本中复制并粘贴此文本字符串…或你喜欢使用的命令文件夹…等等。

0
0
0
2014-07-18 07:35:10 +0000

我知道这是一个windows的问题(而且是一个老问题),但也许它与Linux和OSX类似。当我在寻找一个简单的命令来保持我的笔记本电脑上的网络流量时,这是第一个出现的东西。也许对寻找类似东西的人有用。

在bash脚本中。

WAITSECONDS=30 #or whatever your needs are
IPTOPING=8.8.8.8 #or whatever your needs are
ping -i ${WAITSECONDS} ${IPTOPING} > logfile

单行每30秒ping一次google dns:

ping -i 30 8.8.8.8 > logfile

在OSX和Linux中工作,应该是很标准的,但不知道你在什么系统上。

0
0
0
2017-01-13 17:25:07 +0000

这个问题不是很清楚。显然在一个批处理文件附加到文件中的连续循环是没有用的。特别是当这个批处理文件是由一个重复的外部事件启动的时候……除非你想填满磁盘空间……或者启动大量的命令提示并使系统窒息……。

我的假设是,应该有一些时间段进行测试,然后批处理应该结束。我还假设今天大多数MS Windows都配备了Powershell,这可能会对这种情况有所帮助。这里是双线:

powershell "get-date | out-file <log filename>"
powershell "test-connection <IP> -delay <interval> -count <how many pings> | out-file -append <log filename>"

这可以放在批处理文件中,或者作为一个powershell脚本运行,在这种情况下,去掉 “powershell "和双引号。

不过,在Windows上使用bash似乎是最好的选择… …

-1
-1
-1
2015-04-27 17:57:18 +0000

在基于Windows的系统中,我们可以使用下面的命令在特定的时间间隔

ping xxx.xxx.xxx.xxx -w xxxx -n xx >> c:logfile.txt

其中-w指定了以毫秒为单位的时间间隔,所以1000 ~ 1秒 => 3000为3秒的延迟-n指定了ping将在xxx.xxx.xxx.xxx.xxx向服务器发送查询的次数。

-1
-1
-1
2016-03-23 13:29:44 +0000

这是我用来在指定的时间间隔(本例中为10秒)ping一个特定IP的windows命令:

ping -t <ip.address> -w 10000

-t表示连续ping。

-w表示在下一次ping之前等待这么久。下面是一个1分钟的例子:

ping -t <ip.address> -w 60000

Enjoy, and Good Luck!