34

I was wondering if this was possible? I'm not familiar with using windows command line, but I have to use it for a project I'm working on. I have a a number of files, for which I need to perform a function for each. I'm used to working with python, but obviously this is a bit different, so I was hoping for some help.

Basically I need the for loop to iterate through 17 files in a folder, perform a function on each (that's using the specific software I have here for the project) and then that will output a file with a unique name (the function normally requires me to state the output file name) I would suck it up and just do it by hand for each of the 17, but basically it's creating a database of a file, and then comparing it to each of the 17. It needs to be iterated through several hundred times though. Using a for loop could save me days of work.

Suggestions?

TheFoxx
  • 1,365
  • 6
  • 19
  • 27

3 Answers3

43

The commandline interpreter does indeed have a FOR construct that you can use from the command prompt or from within a batch file.

For your purpose, you probably want something like:

FOR %i IN (*.ext) DO my-function %i

Which will result in the name of each file with extension *.ext in the current directory being passed to my-function (which could, for example, be another .bat file).

The (*.ext) part is the "filespec", and is pretty flexible with how you specify sets of files. For example, you could do:

FOR %i IN (C:\Some\Other\Dir\*.ext) DO my-function %i

To perform an operation in a different directory.

There are scores of options for the filespec and FOR in general. See

HELP FOR

from the command prompt for more information.

a_horse_with_no_name
  • 440,273
  • 77
  • 685
  • 758
Myk Willis
  • 9,698
  • 2
  • 32
  • 52
  • Thanks that's very helpful. What does the %i do? And actually, in order to use the function I need to have command line set to a current directory, and the files in there aren't the ones I need to perform the function on. They're in another directory. Is there a way to state which directory to perform the for loop on? – TheFoxx Jun 25 '12 at 15:24
  • %i is just a variable that holds the matching filenames. You can use different modifiers to get it in different formats. I updated the answer to describe that filespec can include a different directory, so you can specify a particular directory to perform the loop on. The documentation also explains the /R option, which will loop through directories if desired. – Myk Willis Jun 25 '12 at 15:34
  • 5
    in a batch file use %%: FOR %%i IN (*.ext) DO my-function %%i – Emile Apr 04 '14 at 08:58
5

This may help you find what you're looking for... Batch script loop

My answer is as follows:

@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

The first set of commands under the start label loops until a variable, %var% reaches 100. Once this happens it will notify you and allow you to exit. This code can be adapted to your needs by changing the 100 to 17 and putting your code or using a call command followed by the batch file's path (Shift+Right Click on file and select "Copy as Path") where the comment is placed.

Community
  • 1
  • 1
Josh Girouard
  • 71
  • 1
  • 5
3

You might also consider adding ".

For example for %i in (*.wav) do opusenc "%~ni.wav" "%~ni.opus" is very good idea.

Alice Vixie
  • 382
  • 2
  • 10