Windows,如何将批处理程序输出的字节转换为KB,MB或GB?

Windows,如何将批处理程序输出的字节转换为KB,MB或GB?

在 Windows 批处理中,如何将字节转换为 KB 或 MB 或 GB?
在批处理中,如何将结果输出到屏幕?

下面是一个 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 GB(2,041,737,167 / 1073741824)

--

答案1

如果要进行算术运算,则需要先删除千位分隔符。因此,将其更改dir /s/w/cdir /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 位,因此对于较大的文件夹,此方法将失败。此外,正如 Yorik 所提到的,数字将被截断。

输出将不包含千位分隔符。如果您想要这样,那么这可能是一个全新的问题。

答案2

据我所知,批处理不支持浮点,因此您的结果将被截断:

@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

答案3

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

相关内容