Alguma maneira de encontrar a taxa de download e upload em lote no Windows?

Alguma maneira de encontrar a taxa de download e upload em lote no Windows?

Temos um script bat do Windows para calcular a taxa de download através pingdo comando:

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

onde getmsestá outro morcego que usa muitos forcomandos para separar o valor de milissegundo retornado ping(que varia de acordo com o idioma).

Editado: Bem, como essa largura de banda calculada não está relacionada à largura de banda real, uma vez que pingestá relacionada à latência, não à velocidade de transferência, como posso editar esse script para corresponder à taxa de download correta? Existe alguma maneira de fazer isso com comandos nativos, não com comandos de terceiros?

Responder1

Você pode usarBITSpara baixar seu pacote de software. Ele foi projetado para usar apenas largura de banda de rede ociosa, portanto, o download será lento caso a máquina já esteja baixando algo.

Então você pode esperar um pouco e monitorar o progresso do download. Se estiver muito lento, você pode suspender ou cancelar o download. Se estiver tudo bem, deixe-o concluir.

A maneira mais fácil de invocar o BITS é o PowerShell. Aqui está um código para você começar:

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

Salve o script com ps1extensão e use PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1-o para chamá-lo do arquivo em lote (ou apenas chame-o diretamente).

informação relacionada