Windows批处理文件中的数字更大且小于另一个数字

时间:2016-03-03 08:56:09

标签: windows batch-file

我的批处理文件中有以下代码:

if %bakfilesize% geq %freespacet% echo baksize is larger
if %bakfilesize% leq %freespacet% echo baksize is smaller   

当我运行它时,我在屏幕上得到以下输出:

if 399502220288 GEQ 463777075200 echo baksize is larger
baksize is larger

if 399502220288 LEQ 463777075200 echo baksize is smaller
baksize is smaller

谁能告诉我这里发生了什么?我已经尝试了一个带有数字1和2的简单版本,并且Windows可以确认1确实小于2,那么为什么在这种情况下失败?

我只需要geq语句才能工作。另一个是展示奇怪的。

2 个答案:

答案 0 :(得分:1)

您在样本中提供的数字都太大,无法容纳32位整数。我手头没有参考来确认它,但如果CMD.EXE使用32位有符号整数运算,那就不足为奇了。

463777075200 is 0x6BFB449000
399502220288 is 0x5D04301C00

如果这些值被CMD截断为32位,那么较大的值似乎是负数(0xFB449000是-79392768)并且确实小于截断时仍为正的较小值(0x04301C00为70261760)

在原始问题中,它被编辑以纠正您交换变量以及比较运算符的明显错误。尝试:

if %bakfilesize% geq %freespacet% echo baksize is larger
if %bakfilesize% leq %freespacet% echo baksize is smaller

你可能还想考虑一下你的代码在他们平等时会做什么(并且应该做什么)......但我会把这个考虑作为读者的练习。

答案 1 :(得分:1)

好的,在这种情况下,问题很简单。试试这个就像你的例子:

set /a bakfilesize=399502220288

您将收到此错误:

  

号码无效。数字限制在32位精度。

所以这意味着您处理的数字太大而且DOS无法正确地比较它们。