2013-12-17 375 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