2011-10-14 41 views
6

我是一個DOS批處理編程新手。我有什麼我認爲是一個非常簡單的批處理腳本,即不是工作。我尋找類似的帖子,並沒有找到一個匹配。在DOS中比較2個數字批處理不工作

我在XP上運行下面的腳本。我目標是進一步處理之前檢查可用磁盤空間,但我遇到了比較2號問題,所以下面的腳本僅包含邏輯。我有硬編碼的數字來顯示問題,這是...比較(如果x gtr y)似乎不工作,所以分支邏輯去錯了地方。要麼是這樣,要麼我在IF聲明的其他地方搞亂了。 (有些echo語句是不必要的 - 它們是調試 - 但我留在了現在。)

上我要去哪裏錯將不勝感激任何啓示。

THX ...

@echo off 

set Free=217522712576 
set Need=20000000000 

echo Free=%Free% 
echo Need=%Need% 

echo on 
IF %Free% GTR %Need% (GOTO Sufficient_Space) ELSE GOTO Insufficient_Space 
@echo off 

:Insufficient_Space 
@ECHO INSUFFICIENT SPACE 
GOTO DONE 

:Sufficient_Space 
@ECHO SUFFICIENT SPACE 

:DONE 
+2

餘噸我想到了這一點。我認爲這些數字太大了。如果我把兩個數字縮小一個數字,但仍然具有相同的尺寸關係,它的工作原理很好! 我將不得不修改我的腳本來做同樣的事情。也就是說,縮小數字的同時保持它們的大小關係相同。 感謝名單聽:-) (而且,感謝名單給Alex K.重新格式化我的代碼!我想,如果我仔細看這個網站,我會看看如何做這說明我自己,是嗎?) – feenyman99

回答

5

這些數字將溢出32位整數,在Windows的32位版本,因此猜你的,這就是爲什麼它的失敗。

C:\>set /a test=1+2 
3 

C:\>set /a test=1+217522712576 
Invalid number. Numbers are limited to 32-bits of precision. 
3

正如有人說的數字是太大,但是如果你把它們當做字符串,墊出來是一樣的長度,它看起來工作

@echo off 

rem cant do this get: Invalid number. Numbers are limited to 32-bits of precision. 
set Free=217522712576 
set Need=2000000000 

rem can do 
set Free=00000000000%Free%X 
set free=%Free:~-13% 

set Need=00000000000%Need%X 
set Need=%Need:~-13% 


echo Free=%Free% 
echo Need=%Need% 

echo on 
IF %Free% GTR %Need% (GOTO Sufficient_Space) ELSE GOTO Insufficient_Space 
@echo off 

:Insufficient_Space 
@ECHO INSUFFICIENT SPACE 
GOTO DONE 

:Sufficient_Space 
@ECHO SUFFICIENT SPACE 

:DONE 
4

注意,CMD有一個精密betweeb -2^312^31-1 那等於-2 147 483 6482 147 483 647 如果小於極限 一個警告是更大:Invalid number. Numbers are limited to 32-bits of precision.