@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
Here's a fixed version.
Notes: count is not necessary. %%A contains the index 1..%process%.
spaces on each side of the = in a string-assignment (such as a set /p) are significant, so the space between the bt and [ is removed.
Batch simply charges on through the lines of the program until it encounters goto, call or exit. The tests fo end-of-loop are thus not required - once the for loop ends, batch simply passes onto the next instruction line.
at[count] for instance is a variable name, same as whatever. at[%count%] means at[1]..at[??] depending on the value in count- but only outside of a "block" (parenthesised series of lines). Within a block, at[%count%] means at[??] where ?? is the value of count at the time the for statement was encountered. Thie may even be nothingatall - an empty string (ie at[], which is a valid variablename.)
The call echo method uses a parsing trick to first substitute for %%A (the loop-control or metavariable) then echo %at[2]%. Some people don't like using this method - it's slower than the "as-designed" methods and under rare esoteric conditions may not yield the correct result. There are two "official" methods of accessing the run-time or current value of a variable within a loop - setlocal and using a subroutine call - both of which are extensively documented on SO.