If you want an easy way to loop an arbitrary command several times... set /a loop=100 for /L %%P in (1,1,%loop%) do ( echo Looping for one hundred times ) The first line is obvious. The second line is a bit harder - `for /L` specifies that for every number in a certain set, the batch file will do something. `%%P` is a parameter that holds what number the `for` loop is at currently - it can be any letter you like (and some other characters but they are dangerous so stick with letters). `in (1,1,%loop%)` specifies that this is for every number from `1` to `%loop%`, increasing by `1` every time. `do ( ... )` obviously tells the batch file what it needs to do. So, in every number from `1` to `100`, it will `echo` `Looping for one hundred times`. This will obviously scroll down the page seeing as we never clear the screen with `cls`. Once a `for` loop has reached its final number, the batch file continues on executing the commands following the final `)` as you would expect. I can expand this answer if you want to know what you're doing wrong and right in your own code example, but I pretty much just did the same thing in 4 lines which should suffice. ---------- And here comes the expansion. Please note that your code is pretty close to perfect, and these tips only encourage good scripting habits. To begin with, you spelt `variable` as `varible` in `line 3` of the `:HELP` label. First line of the `:RUN` label: set /a counter=%counter% + 1 Instead of this, one can do set /a counter+=1 This isn't _incredibly_ helpful at the moment, but when you want to add a variable to another variable... set /a varA+=%varB% This also works for other operators... set /a varA*=%varB% And slightly more complex equations... set /a varA-=%varB% * %varC% Which will evaluate `%varB% * %varC%`, then subtract the result from `varA` The command `CMD /C "%COMMAND%"` is not entirely necessary to my knowledge - simply writing `%COMMAND%` on a new line will cause the batch parser to expand it, so if `%COMMAND%` is set as `exit`, the line will read, at run time, `exit`. This enables you to use this method rather than the entire `CMD /C` method. Another concern that could become more than just a concern is your method for checking the `errorlevel` - there's a problem. Checking with quotes and `==` denotes a _string_ comparison - _never_ good when you're dealing with two numbers. So you'll need a fix for this problem, and luckily it's quite simple. if %errorlevel% EQU 1 ( ... ) This tests for a mathematical equivalence - _always_ good when you're dealing with two numbers. All the operators for mathematical equivalencies are... EQU - 'equal to' GTR - 'greater than' LSS - 'less than' GEQ - 'greater than or equal to' LEQ - 'less than or equal to' And finally, using `if varA==varB (goto label)` is not necessary - it works just as well as `if varA==varB goto label`. The only time you need brackets is when you plan on conditionally executing multiple lines _or_ if you need to use `else` (just to be safe). When using brackets, always remember to _balance_ them. Indenting isn't required, but it gets _really_ confusing when you start nesting `if` statements and `for` loops without it. An example of executing multiple lines... if %varA% GTR %varB% ( echo varB is less than varA if %varA% GTR %varC% ( echo varC is less than varA ) else ( echo varC is greater than varA ) To conclude, your code obviously works fine, but some habits die hard in weird circumstances later on, so it's best to get used to using common conventions (they exist for a reason!). As a side note, remember that _batch scripting is not case sensitive_. Anything I wrote here, along with anything you wrote, can be written in the opposite case - it has no difference.