I'd like to use xcopy on a windows machine to pull out all files with .png extension into a single directory.

I tried

xcopy C:\folder\*.png /s C:\png\

But its keeping the subdirectories inside \folder, (for example in C:\png there is C:\png\a\b\c\img.png) which I don't want. I simply want all .png inside C:\png WITHOUT it retaining the directory structure that was in C:\folder.

link|improve this question

62% accept rate
feedback

2 Answers

up vote 9 down vote accepted

This can be done with good old for:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

Nothing fancy.

link|improve this answer
It works! Care to explain what the %f is for? – bobobobo Nov 18 '10 at 19:13
It's the loop variable. – Joey Nov 18 '10 at 21:53
feedback

If you have cygwin installed, this would be a job for find:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(though that will have trouble if any of the filenames have spaces in them - you'll find some variant of a find command that will work in all circumstances though)

If you are running Vista, 2003 or 2008 then the less flexible but still useful "forfiles" is your friend. Something like:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

Note: I've not tested either of the above commands, but in theory they should work...

link|improve this answer
+1 just verified that the FORFILES command works. I ran it twice and it copied the 2nd time w/out prompt, so I assume it just overwrites if it finds duplicates. – hyperslug Aug 8 '09 at 18:39
feedback

Your Answer

 
or
required, but never shown

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