tags:

views:

264

answers:

5

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"
+1  A: 

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

DVK
+2  A: 

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
Bugmaster
And you make your whole build depend on the existence of cygwin. Not very nice. Let alone the fact that it's very un-needed for this task.
Joey
+4  A: 

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.

mjv
+2  A: 

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"
akf
+4  A: 

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.

Joey
This looks like the cleanest solution. I knew there had to be a trick. I'm just so used to *nix scripting where things are so much easier. Thanks you all for the info.
bsh152s
Well, it's hardly more convoluted than find/xargs, imho.
Joey