【发布时间】:2021-06-12 21:03:32
【问题描述】:
我想对有关其 ping 时间的网站列表进行排序。 我编写了以下代码来找到最快的 ping 时间 但是当我将循环放入另一个循环以对列表进行排序时,我得到 ECHO 在输出文件中为 OFF。 谁能帮我完成代码并帮助我处理 ECHO 输出?
@echo off
setlocal enableextensions disabledelayedexpansion
echo #Autogenerated regarding ping time> sitePingList.txt
set serverList= "www.site1.com" "www.site2.com" "www.site3.com"
rem Initialize variables
set "selected="
set "min=99999999"
echo - Testing -----------------------------
rem Enumerate the hosts to check
for %%a in ( %serverList% ) do (
rem Ping the host and retrieve the average roundtrip
for /f "tokens=6 delims== " %%r in ('
ping -n 1 "%%~a" ^| findstr /r /c:"^ .*ms$"
') do for /f "delims=ms" %%t in ("%%r") do (
echo "%%~a" : %%t ms
rem Determine if the current host has a lower rtt
rem if %%t geq min or min is already 0, then we have
rem a division by 0, else a lower rtt has been found
set /a "1/(min/(%%t+1))" && (
set "selected=%%~a"
set "min=%%t"
)
)
) 2>nul
echo - Selected ----------------------------
echo %selected% : %min%
set ping1="fastest1: %selected%, user:test, password:123456"
set ping1=%ping1:"=%
>> sitePingList.txt echo %ping1%
我检查了@lit 所说的内容: $result 值如下:
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
NIMA-LAPTOP www.ibm.com 148.251.160.242 32 100
NIMA-LAPTOP www.hp.com 23.58.222.80 32 151
如您所见,输出是两行简单的行,只有 ms 没有其他文本。 另请注意,您应该更改 testConnection 的语法并将 targetName 更改为 computerName
PS C:\Users\Nima> $Targets = @('www.ibm.com', 'www.hp.com')
>> $Results = @()
>> foreach ($Target in $Targets) {
>> $Results += Test-Connection -Count 1 -ComputerName $Target
>> }
>> $Results |
>> Sort-Object -Property Latency |
>> ForEach-Object {
>> "{0} {1}ms" -f @($_.Destination, $_.Latency)
>> }
ms
ms
【问题讨论】:
-
如果这是您的完整脚本,那么
%ping1%不可能为空,这将是echo is OFF出现在sitePingList.txt中的唯一可能条件。你确定你写的文件和你检查的文件是一样的吗? (检查日期/时间戳)。
标签: batch-file cmd ping