关于语法和结果的批处理文件

时间:2013-12-17 19:32:18

标签: batch-file random

  

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. 我希望在for循环中运行9次,但实际上它运行了3次。
  2. 我使用%random%,为什么每次后结果都相同?
  3. 我也希望is_p在if语句之后是1或0,但为什么它实际上是一个随机数呢?

  4.   

    P.S

    • 我是学习如何编写批处理文件的初学者,所以可能有很多错误。
    • 英语不是我的母语,所以请容忍我的英语不好,谢谢。 :)

      To @ Stephan,%is_p%=%random%表示我想为变量is_p分配一个随机数。
      另外,if语句表示如果is_p%2 = 1,则设置is_p = 1.如果is_p%2 = 0,则设置is_p = 0.

      

    更正代码后,它可以运行9次,但每次结果仍然相同。

1 个答案:

答案 0 :(得分:0)

1)对于您的第一个for循环,请使用以下语法:

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

(缺少(可能是一个错字?)

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

(您必须将批次中的百分号加倍)