2011-10-14 46 views
6

Tôi là một bộ đếm thời gian cũ là người mới làm quen với lập trình DOS Batch. Tôi có những gì tôi nghĩ rằng là một tập lệnh lô rất đơn giản, đó là không hoạt động. Tôi đã tìm các bài đăng tương tự và không tìm thấy bài đăng nào phù hợp.So sánh 2 số trong DOS Lô Không hoạt động

Tôi đang chạy tập lệnh dưới đây trên XP. My Mục tiêu là kiểm tra dung lượng đĩa trống trước khi tiếp tục, nhưng tôi đã gặp sự cố so sánh 2 số, vì vậy tập lệnh bên dưới chỉ chứa logic đó. Tôi có những con số được mã hóa cứng để hiển thị vấn đề, đó là ... Sự so sánh (nếu x gtr y) dường như không hoạt động, và vì vậy logic nhánh sẽ đi sai chỗ. Hoặc là, hoặc tôi đang rối tung lên một nơi khác trong câu lệnh IF. (Một số báo cáo echo là không cần thiết - chúng là để gỡ lỗi - nhưng bây giờ tôi đã để chúng lại.)

Bất kỳ sự giác ngộ nào về việc tôi sẽ sai sẽ được đánh giá cao.

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

tôi t hink tôi đã tìm ra điều này. Tôi nghĩ rằng các con số là quá lớn. Nếu tôi làm cho cả hai con số 1 chữ số nhỏ hơn, nhưng vẫn với cùng một mối quan hệ kích thước, nó hoạt động tốt! Tôi sẽ phải sửa đổi tập lệnh của mình để thực hiện tương tự. Đó là, thu nhỏ các con số trong khi vẫn giữ mối quan hệ kích thước của chúng giống nhau. Thanx để nghe :-) (Và, thanx để Alex K. định dạng lại mã của tôi! Tôi cho rằng nếu tôi xem kỹ trang web này, tôi sẽ xem hướng dẫn cách tự làm điều này, đúng không?) – feenyman99

Trả lời

5

Những con số này sẽ tràn một số nguyên 32 bit nên đoán của bạn trên phiên bản 32 bit của Windows, đó là lý do thất bại của nó.

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

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

Như những người khác cho biết con số này là quá lớn, tuy nhiên nếu bạn giữ chúng như là dây và pad ra có cùng độ dài, có vẻ để làm việc

@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

Note Đó CMD Had A betweeb chính xác -2^31 để 2^31-1 rằng bằng -2 147 483 648 để 2 147 483 647 Nếu nhỏ hơn lớn hơn giới hạn một cảnh báo đến: Invalid number. Numbers are limited to 32-bits of precision.

Các vấn đề liên quan