我想检查文件的大小并确定它是否小于或大于 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
部分将执行。
解决方案 :避免计算和比较大数字。通过以下方式转换为较小的数字字符串操作然后进行比较。