DOS: список каталогов, исключающий тип файла?

В MS-DOS, если я введу dir *.pdf, я получу все файлы PDF в каталоге. Есть ли способ получить все, кроме PDF-файлов? Что-то вроде dir !*.pdf?

Спасибо!


dos
person IVR Avenger    schedule 07.05.2009    source источник


Ответы (5)


Я думаю, что есть опция /v для findstr, которая эквивалентна grep -v (включает все строки, которые не содержат текст. Поэтому я бы посмотрел на:

dir | findstr /vi ".pdf"

Синтаксис может немного отличаться, у меня не было особой необходимости его использовать, и я не запускаю Windows в моем текущем местоположении.

Используйте findstr/? из командной строки для получения подробной информации.

Или, если вы устанавливаете CygWin (мой любимый инструмент для подобных вещей), вы можете просто использовать сам grep:

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

Дополнение:

На самом деле я этого не осознавал, но, по-видимому, findstr также поддерживает регулярные выражения, поэтому вы можете использовать:

dir | findstr /vi "\.pdf$"

точно так же, как grep (я не проверял это, я только что нашел его на TechNet, так что вам придется проверить это самостоятельно).

person paxdiablo    schedule 07.05.2009
comment
Спасибо, @Andrew, я действительно не хотел запускать VMWare Player только для того, чтобы проверить его :-) - person paxdiablo; 07.05.2009

Вы можете комбинировать dir с findstr, чтобы сделать почти то, что вы хотите:

dir * | findstr /vi .pdf

Однако обратите внимание, что если файл называется my.pdf.converted.txt, он будет здесь неправильно отброшен.

Если вы ДЕЙСТВИТЕЛЬНО хотите пофантазировать, вот совершенно правильная версия, более подходящая для пакетного сценария:

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

Удачи, что бы вы ни пробовали :) DOS - это "весело".

person Mike    schedule 07.05.2009
comment
К счастью, я не имею дело с такими трюками, как ваш пример pdf.converted.txt. Хороший улов, однако! - person IVR Avenger; 07.05.2009
comment
findstr в XP говорит мне, что он может обрабатывать регулярное выражение достаточно хорошо, чтобы соответствовать концу строки обычным способом. - person Anonymous; 07.05.2009

Я знаю, что это уже работает для вас, но вы могли бы сделать это с большинством версий DOS (по крайней мере, с теми, которые я могу вспомнить), как эта.

Атрибут *.bad +H
каталог /oE
Атрибут *.bad -H

Что влияет на скрытие тех, которые вы не хотите отображать, выполнение каталога, а затем их отображение. Это немного неприятно, я должен признать, но, похоже, это помогает.

person Tollo    schedule 07.05.2009

В MS-DOS или CMD вы просто вводите, чтобы избежать файлов PDF:

dir | find/V ".pdf"

Но помните, что количество файлов в нижней части вывода будет включать файлы pdf.

Кроме того, вы также можете использовать эту команду для других расширений, заменив «.pdf» на «.xxx», где xxx — любое расширение.

person Sohail xIN3N    schedule 10.01.2013

Вот один простой способ без использования findstr/find или конвейера к другой команде:

for %%a in (*) do (
    if not exist %%~Na.pdf   echo %%a
)

В основном цикл for будет перебирать все файлы. «Если не существует» гарантирует, что файл *.pdf не будет напечатан.

%%~Na означает использование имени файла переменной %%a без расширения.

person eureka    schedule 17.11.2014