We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now

x

Arrays in Batch File

Deepak Vasudevan
on
Medium Priority
9,204 Views
Last Modified: 2012-05-05
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.
Comment
Watch Question

Lee W, MVPTechnology and Business Process Advisor
CERTIFIED EXPERT
Most Valuable Expert 2013

Commented:
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.
Deepak VasudevanGlobal Traveller
CERTIFIED EXPERT

Author

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.
Technology and Business Process Advisor
CERTIFIED EXPERT
Most Valuable Expert 2013
Commented:
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

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.