如何将结果从字节转换为千兆字节?请参阅此脚本的示例:
@echo off
set file=C:\Users\%username%\AppData\Local\Microsoft\Outlook\%username%.ost
%1 %0 :: %file%
set len=%~z2
echo %len% %username% >>"C:\Desktop\size.txt"
正如 Michael 在他的回答中所说,批处理可以通过
SET /A
进行数学计算。但计算严格限于整数;没有原生的浮点数学。整数在内部表示为带符号的 32 位整数。因此最大可能的字节数等于~2 GB。有一些批处理例程是为了处理大量数据而编写的,但我不建议使用它们。
将字节转换为千兆字节的公式非常简单:
Gigabytes = Bytes / 1024 / 1024 / 1024
在紧要关头,您可以执行混合脚本并让批量调用 powershell 来进行数学计算。
for /f %%N in ('powershell %~z2/1024/1024/1024') do set len=%%N
但这极其缓慢且低效。您最好直接使用支持浮点的脚本语言(可能是 PowerShell、VBScript 或 JScript)编写整个脚本。
您可以使用这个方法:
set len=%~z2
set /A GB=%len:~0,-3%/1024/1024
这相当于这个公式:GigaBytes = Bytes / 1000 / 1024 / 1024。数字结果实际上与原始公式相同,但此方法可以正确转换超过 2000 GB 的文件大小。
如果想要得到小数点后两位的结果,可以使用这个方法:
set len=%~z2
set /A GBtimes100=%len:~0,-3%/1024*100/1024
echo %GBtimes100:~0,-2%.%GBtimes100:~-2% %username% >>"C:\Desktop\size.txt"
安东尼奥
我们可以使用~,通过使用~-‘要提取的字符数’运算符来提取字符串。
for /f "tokens=2 delims==" %%a in ('wmic computersystem
getTotalPhysicalMemory /value') do (
for /f "delims=" %%b in ("%%a") do (
Set "MEM=%%b"
)
)
Set /a TotalPhysicalMemory = %MEM:~0,-3%/1024/1024
echo %TotalPhysicalMemory% GB