bsh152s
bsh152s

Reputation: 3208

Search for files in a batch script and process those files?

I'm trying to do some things during the pre-build phase of a visual studio project. Specifically, I'm trying to execute some commands on all *.resx files within the project. Here is what I have but it doesn't work when the files/directory path have a space in them. How do I get around these spaces?

for /f %%a in ('dir /B /S *.resx') do echo "%%a"

Upvotes: 13

Views: 50693

Answers (6)

Tom
Tom

Reputation: 11

To generate a simple file list of all the relevant files for later processing

@echo create a results file…
if exist results.txt (del results.txt)
echo. >NUL 2>results.txt

@echo minimal recursive subdirectory search for filespec...
dir /s /a /b "*.resx" >>results.txt

Upvotes: 1

Joey
Joey

Reputation: 354356

You know that for can also run recursively over directories?

for /r %%x in (*.resx) do echo "%%x"

Much easier than fiddling with delimiters and saves you from running dir.

Upvotes: 24

mjv
mjv

Reputation: 75095

Stick with the For text parser of the shell

for /f "delims=|" %%a in ('dir /B /S *.resx') do echo "%%a"

just add a delims option (for a delim character which obviously couldn't exist), et voila!

In the absense of this delims option, /f will do what it is supposed to, i.e. parse the input by splitting it at every space or tabs sequence.

Upvotes: 4

akf
akf

Reputation: 39475

You are running into inadvertant use of the default space delimeter. You can fix that by resetting the delims like so:

for /f "delims=" %%a in ('dir /B /S *.resx') do echo "%%a"

Upvotes: 3

Bugmaster
Bugmaster

Reputation: 1080

You could also install cygwin to get a full-blown Unix-esque shell, which comes with the trusty old "find" command, plus a bunch of other tools. For example,

find . -name "*.resx" | xargs grep MyProjectName

Upvotes: 2

DVK
DVK

Reputation: 129363

You can use findutils for Windows - it includes both "find" and "xargs"

Upvotes: 3

Related Questions