DOS: список каталогов, который исключает тип файла? - PullRequest
6 голосов
/ 07 мая 2009

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

Спасибо!

Ответы [ 5 ]

13 голосов
/ 07 мая 2009

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

dir | findstr /vi ".pdf"

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

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

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

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

Добавление:

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

dir | findstr /vi "\.pdf$"

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

3 голосов
/ 07 мая 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 - это "весело".

0 голосов
/ 17 ноября 2014

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

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

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

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

0 голосов
/ 10 января 2013

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

dir | find/V ".pdf"

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

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

0 голосов
/ 07 мая 2009

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

Атрибут * .bad + H
dir / oE
Атрибут * .bad -H

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

...