有什麼方法可以在 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是另一個 bat,它使用大量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從批次檔中呼叫它(或直接呼叫它)。

相關內容