2013-12-17 339 views
0

compare.txt:批處理文件

a_max<=a_min 

這裏是我的批處理文件:

@echo off 
for %%n in (1 1 9) do 

set \a "is_p=%random%" 
set \a "n=%random%" 
set \a "a_max=%random%" 
set \a "a_min=%random%" 
set \a "a_min=%random%" 
if "is_p%2"=="1" (%is_p%=1) 
if "is_p%2"=="0" (%is_p%=0) 
for %%n in (compare.txt) do ( 
%a_min%=%random% 
) 
echo %is_p% %n% %a_max% %a_min% >> input.txt 
allsort <input.txt> results.txt 
) 

在input.txt的結果是:

12405 220 26501 3870 
12405 220 26501 3870 
12405 220 26501 3870 

我的問題是:

  1. 我希望運行在循環9次,但實際上它跑了3次。
  2. 我使用%random%,以及爲什麼結果每次都是一樣的?
  3. 我也希望if語句後is_p是1或0,但爲什麼它實際上是一個隨機數?

P.S

  • 我學習如何編寫批處理文件的初學者,所以可能有很多錯誤。
  • 英語不是我的母語,所以請容忍我可憐的英語,謝謝。 :)

    To @ Stephan,%is_p%=%random%表示我想爲變量is_p指定一個隨機數。
    另外,如果語句表示如果is_p%2 = 1,則設置is_p = 1。並且如果is_p%2 = 0,則設置is_p = 0。

正確的代碼後,它可以運行9倍,但結果每次都還是一樣。

+0

設置一個變量,你必須使用'set'command。要獲取變量的內容,請使用'%variable%'。而不是檢查'var%2'是0還是1,並將var設置爲0或1,只需將該變量設置爲'var%2'(使用%%而不是%,因爲您處於批處理文件中) – Stephan

+0

編輯您的問題以反映新的(更正的)代碼? – Stephan

回答

0

1)你的第一個for循環使用的語法如下:

for /L %%n in (1 1 9) do (

(失蹤(被probaply一個錯字)

2)你的主要問題是:在一個代碼塊( ()之間的所有變量都會立即進行評估 - 因此您所有的%random%都是相同的。 您必須使用setlocal ENABLEDELAYEDEXPANSION並使用!random!而不是%random%

- )%a_min%=%random% - 這不是一個有效的語法 - 你想做什麼?

3)if "is_p%2"=="1" (%is_p%=1) - 這不,你認爲它的確如此。我想你的意思是這樣的:

set /a is_p=!is_p! %%2 

(你必須在該批次百分號雙)

+0

另外'set \ a'不正確。必須是'set/a' – Magoo