Windows, como converter a saída do programa em lotes de bytes para KB, MB ou GB?

0

No lote do Windows, Como converter Bytes em KB ou MB ou GB?
Em lote, como produzir resultados para a tela?

Abaixo está um lote do Windows que gera um tamanho de pasta em bytes.
exemplo:
2,041,737,167 bytes em d: \ temp

@echo off    
set bytes=    
for /f "usebackq tokens=1,2,3,4" %%a in ('dir /s/w/c "d:\temp\" ^| findstr "File(s)"') do set bytes=%%c    
echo %bytes%  bytes in d:\temp\*.*    
pause    

Em lote, como converter?
2.041.737.167 bytes para:

1,993,883 KB (2,041,737,167 / 1024) - 1947 MB (2,041,737,167 / 1048576) - 1,9 GB (2 041.737.167 / 1073741824 )

-

    
por Joseph 03.11.2017 / 14:43

3 respostas

0

Se você quiser fazer a aritmética, você precisa se livrar dos milhares de separadores primeiro. Então, altere dir /s/w/c para dir /s/w/-c . Então, é uma divisão simples:

set /a kb=%bytes% / 1024
set /a mb=%bytes% / 1048576
set /a gb=%bytes% / 1073741824
echo %kb% kB
echo %mb% MB
echo %gb% GB

Observe que os números são limitados a 32 bits de precisão, portanto, para pastas grandes, isso falhará. Além disso, como Yorik mencionou, os números serão truncados.

A saída não terá mil separadores. Se você quiser, provavelmente é uma questão totalmente nova.

    
por 03.11.2017 / 15:08
0

O lote não suporta ponto flutuante até onde eu saiba, então seus resultados serão truncados:

@echo off
set /a "_number=2041737167/1073741824"
echo %_number%
pause

Emitiria 1 em vez de 1.9

Geralmente, as pessoas chamam o cscript (etc) para funções matemáticas (por exemplo: link )

    
por 03.11.2017 / 15:08
0

cmd.exe é um processo de 32 bits, portanto, comandos como:

set /a result1=%bytes% / 1024

falhará com o erro: "Número inválido. Os números estão limitados a 32 bits de precisão

Se você estiver em um dispositivo de 64 bits (hoje em dia é muito provável), chame o prompt de comando de C:\Windows\SysWOW64\cmd.exe e ele funcionará, por exemplo, sua linha de comando deve ser algo assim:

C:\Windows\SysWOW64\cmd.exe /C path\to\batchfile.cmd
    
por 03.11.2017 / 15:11

Tags