windows批量将字节转换为GB

问题描述 投票:0回答:3

如何将结果从字节转换为千兆字节?请参阅此脚本的示例:

@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"
batch-file size
3个回答
2
投票

正如 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)编写整个脚本。


2
投票

您可以使用这个方法:

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"

安东尼奥


0
投票

我们可以使用~,通过使用~-‘要提取的字符数’运算符来提取字符串。

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
© www.soinside.com 2019 - 2024. All rights reserved.