2011-10-14 18 views
6

मैं एक पुराना टाइमर हूं जो डॉस बैच प्रोग्रामिंग के लिए नौसिखिया है। मेरे पास लगता है एक बहुत ही सरल बैच स्क्रिप्ट है, जो काम नहीं कर रहा है। मैंने इसी तरह की पोस्ट की तलाश की, और मेल खाने वाला कोई नहीं मिला।डॉस बैच में 2 नंबरों की तुलना करना

मैं XP पर निम्न स्क्रिप्ट चला रहा हूं। मेरा लक्ष्य आगे बढ़ने से पहले फ्री डिस्क स्थान की जांच करना है, लेकिन मैं की समस्या में 2 संख्या की तुलना में भाग गया, इसलिए नीचे दी गई स्क्रिप्ट में केवल वह तर्क शामिल है। समस्या को दिखाने के लिए मेरे पास हार्ड-कोड संख्याएं हैं, जो है ... तुलना (यदि x gtr y) काम नहीं करती है, और इसलिए शाखा तर्क गलत जगह पर जाता है। या तो, या मैं आईएफ कथन में कहीं और गड़बड़ कर रहा हूँ। (गूंज बयान में से कुछ अनावश्यक हैं - वे डिबगिंग के लिए हैं - लेकिन मैंने उन्हें अभी तक छोड़ा है।)

मैं कहां गलत हो रहा हूं, इस पर कोई ज्ञान की सराहना की जाएगी।

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

मैं टी हिंक मैंने इसे समझ लिया। मुझे लगता है कि संख्याएं बहुत बड़ी हैं। यदि मैं दोनों नंबरों को 1 अंक छोटा करता हूं, लेकिन फिर भी एक ही आकार के रिश्ते के साथ, यह ठीक काम करता है !! मुझे अपनी स्क्रिप्ट को ऐसा करने के लिए संशोधित करना होगा। यही है, अपने आकार के संबंधों को बनाए रखते हुए संख्याओं को कम करें। सुनने के लिए Thanx :-) (और, मेरे कोड को दोबारा सुधारने के लिए एलेक्स के। सेक्सक्स! मुझे लगता है कि अगर मैं इस साइट पर सावधानी से देखता हूं, तो मैं इसे स्वयं कैसे करना है, इस पर निर्देश देखूंगा?)? – feenyman99

उत्तर

5

उन संख्याओं को एक 32 बिट पूर्णांक तो खिड़कियों की एक 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

नोट सीएमडी था कि एक सटीक betweeb लग रहा है -2^31 को 2^31-1 कि बराबर -2 147 483 648 को 2 147 483 647 हैं के छोटे सीमा एक चेतावनी आया से भी बड़ा: Invalid number. Numbers are limited to 32-bits of precision.

संबंधित मुद्दे