检查文件大小是否超过 10GB

检查文件大小是否超过 10GB

我想检查文件的大小并确定它是否小于或大于 10 GB。这可以在 32 位可变大小下运行。

有没有什么技巧或者聪明的方法可以解决这个问题?

目前我正在使用这个代码:

SET maxbytesize=10707652095
.
.
.
FOR %%F IN ("%%~fl") DO SET size=%%~zF

IF !size! LSS !maxbytesize! (
    echo smaller 10GB
) ELSE (
    echo bigger 10GB
)

此代码在 2GB 限制内运行。所有超过 2GB 的文件都会显示“大于 10GB”。这仅适用于 2GB 以下的文件。

有人知道如何修复它吗?

问候

//编辑:最大字节大小

答案1

我有一个可以解决这种情况的解决方案。

字符串操作:

设置/A sizeMB=%size:~-0,-6%
设置/A maxbytesizeMB=%maxbytesize:~-0,-6%

这是通过省略右边的 6 位数字将较大的数字转换为较小的数字。
这使其几乎相当于兆字节。

现在在批处理脚本中,您将比较较小的数字,这也适用于 32 位情况。

以下是具体问题:

执行 SET /A sizeMB=4587794013/1048576
输出 Invalid number. Numbers are limited to 32-bits of precision.

执行 if 111111111 LSS 222222222 ( echo 1234 ) else ( echo 5678 )
输出 1234

执行 if 1111111111 LSS 2222222222 ( echo 1234 ) else ( echo 5678 )
输出 1234

执行 if 11111111111 LSS 22222222222 ( echo 1234 ) else ( echo 5678 )
输出 5678

执行 if 111111111111 LSS 222222222222 ( echo 1234 ) else ( echo 5678 )
输出 5678

如果数字为 9 位或 10 位或更少,则输出正确。
如果数字为 11 位或 12 位或更多,则输出错误。

这里,If表达式 无法执行,因此它被理解为false。因此true部分将不会执行,else部分将执行。

解决方案 :避免计算和比较大数字。通过以下方式转换为较小的数字字符串操作然后进行比较。

相关内容