2013-04-03 85 views
0

我在批處理代碼中遇到了諸如<,>和==之類的數字比較問題。什麼IM做的是產生一個隨機數,並使用該答案做一些事情,這是我寫的東西:批量代碼中的數字比較

set rand=%random% 
set rand=%rand:~1,1% 
If %rand%==9 goto nine 
If %rand%>5 goto above 5 
If %rand%>1 goto above 1 
If %rand%==0 goto zero 

當我運行的代碼只是關閉。我試圖在兩個被比較的對象和不平等之間放置空間,但它仍然不起作用。

請記住,這是Windows上的批處理代碼。

+0

'<>'不能批量工作,請參閱命令行中的'if/?'。 – Endoro

+0

記住你通常也想在這些上使用引號,比如'if「10」gtr「5」goto above'' –

回答

1

閱讀HELP IF,然後嘗試這個

if %rand% equ 9 goto nine 
if %rand% gtr 5 goto above5 
goto below5 

注意,標籤名稱不能包含空格

作爲一個額外的獎金,閱讀HELP SET和改變你嘗試獲取隨機0到9的數字的方式into

set /a rand=%random% %% 10 
+1

哦,當然!閱讀「幫助設置」。非常好的建議。這裏有幾個陷阱。目前還不清楚'set rand =%rand:〜1,1%'是爲了得到字符串的'FIRST'字符。它實際上會得到'SECOND',因爲子串使用了一個ZERO基礎作爲開始位置。但是獲得'FIRST'字符會導致選擇劇烈傾斜。由'%random%'返回的數字STRING是'0'..'32767'。這意味着32768個組合中只有'ONE'結果開始'0',但11,111開始'1',11,111開始'2'。 – Magoo

+0

如果'set rand =%rand:〜1,1%'被故意選擇來獲得'SECOND'字符,這將導致更均勻的分佈,那麼對於'%RANDOM%'= 0..9(只有10結果爲32768),那麼'RAND'將被設置爲[nothing],並且會對'IF'語句造成嚴重破壞,因爲第一個比較字符串將是空的,從而擾亂了語法。而'set/a ...'方法會工作*使用'set rand =%rand:〜-1%'會更簡單,它返回'rand'的'LAST'字符並且等同於完全相同事情。或'set/a rand =%random:〜-1%',這節省了一個步驟,並且仍然更簡單。 – Magoo

+0

正確,我無法建議'%rand:〜-1%'或'%random%%% 10',因爲目前的情況並沒有任何不同。但'%random%%% 10'更靈活。你可能會改變另一個數字10來獲得一個不同的範圍(例如,對於未使用骰子的骰子使用6) –

0

如果命令使用這些鍵代替等於和大於符號;

EQU - equal 
NEQ - not equal 
LSS - less than 
LEQ - less than or equal 
GTR - greater than 
GEQ - greater than or equal 

對於這個,我會建議使用==代替equ。更容易打字。