В пакетном режиме Windows Как преобразовать байты в КБ или МБ или ГБ?
В пакетном режиме, как выводить результаты на экран?

Ниже приведен пакет Windows, который выводит размер папки в байтах.
пример:
2 041 737 167 байт в 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    

В пакетном режиме, как конвертировать?
2 041 737 167 байт для:

1,993,883 КБ (2,041,737,167 / 1024)
1947 МБ (2 041 737 167/1048576)
1,9 ГБ (2 041 737 167/1073741824)

-

3 ответа3

0

Если вы хотите сделать арифметику, вам нужно сначала избавиться от тысячи разделителей. Итак, измените dir /s/w/c на dir /s/w/-c . Тогда это простое разделение:

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

Обратите внимание, что числа ограничены 32-битной точностью, поэтому для больших папок это не удастся. Также, как упоминал Йорик, числа будут обрезаны.

На выходе не будет тысячи разделителей. Если вы хотите этого, это, вероятно, совершенно новый вопрос.

0

Насколько я знаю, пакет не поддерживает плавающую точку, поэтому ваши результаты будут усечены:

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

Издаст 1 вместо 1.9

Часто люди будут вызывать cscript (и т.д.) Для математических функций (например: https://stackoverflow.com/questions/1503888/floating-point-division-in-a-dos-batch )

0

cmd.exe - это 32-битный процесс, поэтому команды:

set /a result1=%bytes% / 1024

потерпит неудачу с ошибкой: «Неверный номер.Числа ограничены 32-битной точностью

Если вы оказались на 64-битном устройстве (в настоящее время это очень вероятно), вызовите командную строку из C:\Windows\SysWOW64\cmd.exe и она будет работать, например, ваша командная строка должна выглядеть примерно так:

C:\Windows\SysWOW64\cmd.exe /C path\to\batchfile.cmd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .