Gibt es eine Möglichkeit, die Download- und Upload-Rate unter Windows per Batch zu ermitteln?

Gibt es eine Möglichkeit, die Download- und Upload-Rate unter Windows per Batch zu ermitteln?

Wir haben ein Windows-Bat-Skript zum Berechnen der Downloadrate mit dem folgenden pingBefehl:

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

wo getmssich ein weiterer Bat befindet, der viele forBefehle verwendet, um den zurückgegebenen Millisekundenwert zu trennen ping(der je nach Sprache variiert).

Bearbeitet: Nun, da die berechnete Bandbreite nichts mit der tatsächlichen Bandbreite zu tun hat, sondern pingmit der Latenz und nicht mit der Übertragungsgeschwindigkeit, wie kann ich dieses Skript bearbeiten, damit es die richtige Downloadrate liefert? Gibt es eine Möglichkeit, das mit nativen Befehlen zu tun, nicht mit denen von Drittanbietern?

Antwort1

Sie könnenBITSum Ihr Softwarepaket herunterzuladen. Es ist so konzipiert, dass es nur die ungenutzte Netzwerkbandbreite nutzt, sodass der Download langsam erfolgt, falls der Computer bereits etwas herunterlädt.

Dann können Sie ein wenig warten und den Download-Fortschritt überwachen. Wenn er zu langsam ist, können Sie den Download entweder unterbrechen oder abbrechen. Wenn alles in Ordnung ist, lassen Sie ihn einfach abschließen.

Der einfachste Weg, BITS aufzurufen, ist PowerShell. Hier ist ein Code, der Ihnen den Einstieg erleichtert:

$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)"    
}

Speichern Sie das Skript mit ps1der Erweiterung und PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1rufen Sie es aus einer Batchdatei auf (oder rufen Sie es einfach direkt auf).

verwandte Informationen