在 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/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 位,因此对于较大的文件夹,此方法将失败。此外,正如 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