我目前在一家大公司工作,我们遇到了严重的延迟问题。这发生在过程控制系统中,这是不可接受的(打开阀门有时需要 2 分钟才能开始执行命令)
当网络团队说“网络一切正常”时,我想再检查一下。因此,我想创建一个循环来 ping 服务器并将结果写入文本文件。
我不是批处理专家,但您认为此代码使用起来正确吗?
@ECHO OFF
:LOOPSTART
time /T
ping xxx.xx.x.x -t >> filename.txt
sleep -m 3000
GOTO LOOPSTART
答案1
我觉得这没问题,但如果您想连续 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
通常是可用的。
您的系统缺少sleep
或timeout
命令?不要担心。只需timeout
用以下 hack 替换即可:
@ping 127.0.0.1 -n %INTERVAL% > nul
这个 hack 只是 ping 你的本地地址,因为它会立即响应,我们可以使用它来仿真执行延迟。
答案2
我知道这是一个 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,应该是相当标准的,不知道你使用的是什么系统。
答案3
对于单行解决方案,请使用以下命令:
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"
注意:
- 你可以
xxx.xxx.xxx.xxx
替换google.com
- 要编辑间隔,请将 更改
3000
为60
(1 分钟)或10
(10 秒) - 如果你需要把这个命令放在批处理文件(.bat 或 .cmd)中,那么请确保
%
用%%
答案4
如果您只想将其粘贴到 Windows 上的命令窗口中...
(对于 /l %a 在()中执行@for /f "tokens=*" %b 在('ping -w 1000 -n 1 8.8.8.8 ^| findstr "回复请求未知目的地"')中执行@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
另外,您可以通过更改“超时”后的值来调整超时,在本例中为 3 秒...
而且您不必保存到批处理文件...只需从存储在已保存的云位置的文本中复制并粘贴此文本字符串即可..或您喜欢使用的命令文件夹..等等。