如何在批处理文件中使用for循环初始化数组

时间:2014-09-15 11:54:15

标签: batch-file

我已经创建了一个代码但是当我要显示它时,我只显示我输入的最后一个数字。请帮帮我。

@echo off
set /a count = 0
set /p process= How many process: 

:BT
echo BT
FOR /L %%A IN (1,1,%process%) DO (
    set /p bt [%%A]=
    IF %%A == %process% goto AT
)

:AT
echo AT
FOR /L %%A IN (1,1,%process%) DO (
   set /a count = %%A
   set /p at[count]=

   IF %%A == %process% goto TABLE
)

:TABLE
echo                       TABLE

echo PROCESS      AT                    BT
FOR /L %%A IN (1,1,%process%) DO (
    set /a count = %count%+1

    echo  P%%A         %at[count]%   

    IF %%A == %process% goto AWT
)

:AWT

pause

1 个答案:

答案 0 :(得分:1)

@echo off
set /p process= How many process: 
:BT

echo BT

FOR /L %%A IN (1,1,%process%) DO (
 set /p bt[%%A]=
)

:AT

echo AT

FOR /L %%A IN (1,1,%process%) DO (
 set /p at[%%A]=
)

:TABLE
echo                       TABLE

echo PROCESS      AT                    BT
FOR /L %%A IN (1,1,%process%) DO (
CALL echo  P%%A         %%at[%%A]%%   %%bt[%%A]%%
)

:AWT

pause

GOTO :EOF

这是一个固定版本。

注意:count不是必需的。 %%A包含索引1 .. %process%

字符串分配(例如=)中set /p 侧的空格是重要的,因此bt[之间的空格goto已被删除。

批量只需通过程序行收费,直到遇到callexitfor为止。因此不需要循环结束的测试 - 一旦at[count]循环结束,批处理就会传递到下一条指令行。

例如,

whatever是变量名,与at[%count%]相同。 count表示[1] ..在[??],取决于at[%count%]中的值 - 但只有 <&34>块&#34; (带括号的系列线)。 块中,at[??]表示??,其中count是遇到for语句时at[]的值。你甚至可能是 nothingatall - 一个空字符串(即call echo,这是一个有效的变量名。)

%%A方法使用解析技巧首先替换metavariable(循环控件或echo),然后%at[2]% setlocal。有些人不喜欢使用这种方法 - 它比设计的&#34;慢。方法和罕见的深奥条件可能无法产生正确的结果。有两个&#34;官方&#34;在循环中访问变量的运行时当前值的方法 - {{1}}并使用子程序调用 - 这两种方法都在SO上广泛记录