¿Alguna forma de encontrar la tasa de descarga y carga por lotes en Windows?

¿Alguna forma de encontrar la tasa de descarga y carga por lotes en Windows?

Tenemos un script bat de Windows para calcular la velocidad de descarga mediante pingel 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

donde getmshay otro murciélago que usa muchos forcomandos para separar el valor de milisegundos devuelto ping(que varía según el idioma).

Editado: Bueno, dado que ese ancho de banda calculado no está relacionado con el ancho de banda real, una vez que pingestá relacionado con la latencia, no con la velocidad de transferencia, ¿cómo puedo editar ese script para que coincida con la velocidad de descarga correcta? ¿Alguna forma de hacerlo con comandos nativos, no con comandos de terceros?

Respuesta1

Puedes usarBITSpara descargar su paquete de software. Está diseñado para utilizar únicamente el ancho de banda de red inactivo, por lo que se descargará lentamente en caso de que la máquina ya esté descargando algo.

Luego puedes esperar un poco y monitorear el progreso de la descarga. Si es demasiado lento, puedes suspender o cancelar la descarga. Si está bien, déjelo completar.

La forma más sencilla de invocar BITS es PowerShell. Aquí hay un código para comenzar:

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

Guarde el script con ps1extensión y utilícelo PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1para llamarlo desde un archivo por lotes (o simplemente llámelo directamente).

información relacionada