tags:

views:

452

answers:

3

Hi, all.

In MS-DOS, if I enter dir *.pdf, I'll get all the PDF files in a directory. Is there a way to get everything but PDF files? Something like dir !*.pdf?

Thanks!

+6  A: 

I think there's a /v option for findstr which is equivalent to grep -v (include all lines that don't contain the text. So I'd be looking at:

dir | findstr /vi ".pdf"

The syntax may be slightly different, I haven't had much need to use it and I don'r run Windows at my current location.

Use findstr /? from a command prompt for details.

Or, if you install CygWin (my tool of choice for this sort of stuff), you can just use grep itself:

ls -al | grep -vi '\.pdf$'

Addendum:

I actually didn't realize this but apparently findstr also support regexes so you can use:

dir | findstr /vi "\.pdf$"

just the same as grep (I haven't tested this, I only just found it on TechNet, so you'll need to test it yourself).

paxdiablo
+1 That seems to do it - nice work.
Andrew Hare
Thanks, @Andrew, I didn't really want to crank up VMWare Player just to test it :-)
paxdiablo
Works great. Thanks!
IVR Avenger
+1  A: 

You can combine dir with findstr to almost do what you want:

dir * | findstr /vi .pdf

Note though, that if a file is called my.pdf.converted.txt, it will be incorrectly thrown away here.

If you REALLY want to get fancy, here's a completely correct version, more appropriate for a batch script:

for /f %a in ('dir /b *') do @if "%~xa" neq ".txt" echo %a

Good luck no matter what you try :) DOS is "fun".

Mike
Blessedly, I'm not dealing with any tricks like your "pdf.converted.txt" example. Good catch, though!
IVR Avenger
findstr in XP tells me it can handle regex well enough to match the end of the line in the usual way, too
Anonymous
A: 
Tollo