Arrays in Batch File

Hi,

In a typical DOS Batch file, can we have something like Arrays (like in other programming languages) so that we can read each of the element in the array, prepare a DOS command with this array and execute the same.

I would also like each of the DOS command being executed to wait for the executing command to exit before proceeding to issue the next command.

I can do this in C# but in DOS Batch file I am confused.
LVL 15
deepaknetAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Lee W, MVPTechnology and Business Process AdvisorCommented:
DOS batch files are a series of programs executed in sequence.  There are some ways of throwing in variables and executing out of sequence, but thinking of DOS as a programming language would be a stretch.

You can do a lot with the for command - type for /? at a command prompt for more information on the for command.

It would help if you could give a specific example of what you are looking for.
0
deepaknetAuthor Commented:
Would then having a VBScript file and calling from CScript do the trick.

Basically, I would give you an example:

An array of Fruits like {Apple, Mango, Pomegranete, Banana}

Now I have to call an application like

FruitVendor.exe and pass each of the fruit one at a time. Additionally, while one instance of FruitVendor is running, the loop should wait for exit and then take the next one.

In C#, I can do this as

string[] strFruit = {"Apple", "Mango","Pomegranete", "Banana"};

Then I can use foreach to iterate through this and call Process.Start ("fruitvendor.exe") and pass each of the fruit with WaitForExit() enabled.

The problem is that this needs to be a batch file preferably instead of a compiled application.
0
Lee W, MVPTechnology and Business Process AdvisorCommented:
Ok, here's the thing - I know there's a way to do this as I worked on a question where we tried to parse drive letters like that, but the command that gave the drive letters worked strangely.  Unfortunately, I don't remember the EXACT "for" command syntax for it (I'll try to dig it up but I'e participated in a LOT of questions).

One way to do it is to create a text file - fruits.txt - so the text file is your array. In your example, the text file would have 4 lines, one fruit per line, NOTHING ELSE.

Then this for command would execute the command for each fruit.  The nature of a batch file won't allow it to run the next command until that one is done.  (Again, there are ways around this, but you WANT this behaviour).

FOR /F "tokens=*" %a IN (fruits.txt) DO yourcommand %a

For a demonstration, run this command:
FOR /F "tokens=*" %a IN (fruits.txt) DO @Echo my fruit is %a

NOTE: when using the for command in a batch file, you need to use %% instead of % - so BATCH FILE ONLY:
FOR /F "tokens=*" %%a IN (fruits.txt) DO @Echo my fruit is %%a
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Windows XP

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.