有没有办法在 Windows 上批量查找下载和上传速率?

有没有办法在 Windows 上批量查找下载和上传速率?

我们有一个 Windows bat 脚本,通过命令来计算下载速率ping

SETLOCAL ENABLEDELAYEDEXPANSION
set address=8.8.8.8
set packagesize=65500
set times=20
set accumulator=0

for /l %%a in (1,1,%times%) do (
    for /f %%b in ('getms ping -n 1 -l %packagesize% %address%') do (
        set /a "accumulator=!accumulator!+%%b"
    )
)

set /v "velocity=!packagesize!*!times!/!accumulator!"
echo.!velocity!kbps

其中getms另一个蝙蝠使用大量for命令来分离返回的毫秒值ping(根据语言而有所不同)。

已编辑:好吧,由于计算出的带宽与实际带宽无关,一旦ping与延迟有关,而不是传输速度,我该如何编辑该脚本以匹配正确的下载速率?有没有办法使用本机命令而不是第三方命令来做到这一点?

答案1

您可以使用商务智能系统下载软件包。它被设计为仅使用空闲的网络带宽,因此如果机器正在下载某些内容,它将缓慢下载。

然后您可以稍等片刻并监控下载进度。如果太慢,您可以暂停或取消下载。如果没问题,就让它完成。

调用 BITS 的最简单方法是使用 PowerShell。以下是一些代码,可帮助您入门:

$transfer = Start-BitsTransfer -Asynchronous -Source 'http://mirror.yandex.ru/ubuntu-releases/17.04/ubuntu-17.04-server-i386.iso' -Destination 'c:\Temp'
$bytesTransferred = 0
while($transfer.JobState -eq 'Connecting' -or $transfer.JobState -eq 'Transferring')
{
    $delay = 5
    Start-Sleep -Seconds $delay

    if ($transfer.JobState -eq 'Transferring')
    {
        $bytesDelta = $transfer.BytesTransferred - $bytesTransferred
        $bytesTransferred = $transfer.BytesTransferred

        # Check if speed is less than 1 MB/s
        if ($bytesDelta -lt (1MB * $delay))
        {
            Write-Warning 'Download is too slow, aborting'
            Remove-BitsTransfer $transfer
            # Also can use Suspend-BitsTransfer $transfer to pause and Resume-BitsTransfer $transfer to resume
            break
        }
    }
}
if ($transfer.JobState -eq 'Transferred')
{
    Complete-BitsTransfer $transfer
    Write-Information 'Download complete'
}
else
{
    Write-Error "Download error $($transfer.ErrorDescription)"    
}

使用扩展名保存脚本ps1并使用PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1批处理文件调用它(或者直接调用它)。

相关内容