Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I need to run a windows command n times within a bat script file. I know how to do this in various programming languages but cannot manage to get it right on the windows command line :-(

I would expect something like either

for(int i = 0; i < 100; i++) {
   // do something
}

or even this (though not entirely seriously)

1.upto(100, {
   // do something
})

Thanks!

EDIT

I can write a program in java, perl, c or whatever that will generate a bat script that looks like this

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

and so on. Or even "better":

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

and then execute it... But the thing is that I need a concise way to specify a range of numbers to iterate through within the script.

Thanks!

share|improve this question
1  
The answers here are perfectly good, but for the love of God...batch? Really? I would highly recommend moving to a more modern language. –  EBGreen Aug 26 '09 at 14:22
    
It doesn't sound like he's got a choice in the matter. –  wolfgangsz Aug 26 '09 at 15:20
    
I haven't seen anything that implies there is no choice. As a matter of fact he says he can write in "whatever" language, so I would say that without further information it sounds like he does have a choice. –  EBGreen Aug 26 '09 at 15:39
    
Guys, I need to deploy code THAT is written in a modern language BY a script... –  raoulsson Aug 26 '09 at 16:22
1  
May it is or isn't required - sometimes it is the right tool for the job. You can't guarantee powershell, let alone bash, python, perl, etc. be installed on a Windows XP or 2003 server box. Batch is a perfectly acceptable solution. –  Goyuix Aug 27 '09 at 18:04
show 2 more comments

3 Answers

up vote 17 down vote accepted

You can do it similarly like this:

FOR /L %i IN (1,1,5) DO (
  ECHO Start of Loop
  ECHO %i
)

The 1,1,5 is decoded as:

(start,step,end)

Also note, if you are embedding this in a batch file, you will need to use the double percent sign (%%) to prefix your variables, otherwise the command interpreter will try to evaluate the variable %i prior to running the loop.

share|improve this answer
2  
"ECHO Start of Loop" will be executed at each step, not just the start. –  Dennis Williamson Aug 26 '09 at 14:23
    
Also, using an @ sign will supress printing of the commands as they are executed from the command line. "... DO @( ..." –  Dennis Williamson Aug 26 '09 at 14:28
    
This works only with the /L after the "FOR". Why's that? –  raoulsson Aug 26 '09 at 14:52
1  
Do a For /? and you will find: FOR /L %variable IN (start,step,end) DO command [command-parameters] The set is a sequence of numbers from start to end, by step amount. So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would generate the sequence (5 4 3 2 1) –  EBGreen Aug 26 '09 at 15:03
add comment

Syntax is

FOR %%A IN (1 2 3) DO ECHO %%A

Good article here and XP specifics here

share|improve this answer
    
for variables are case sensitive, you need to be consistent with the case of your variables. It can also be (almost) any character. –  Goyuix Aug 26 '09 at 14:15
add comment

Directly from the command line:

for /L %n in (1,1,100) do @echo %n

Using a batch file:

@echo off
for /L %%n in (1,1,100) do echo %%n

Displays:

1
2
3
...
100
share|improve this answer
add comment

protected by Michael Hampton Mar 28 at 0:15

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.