Вопрос или проблема
Если я хочу увидеть, например, файлы с определенным расширением, используя команду dir, я могу сделать это с помощью команды:
DIR *.txt
И это покажет все файлы с расширением .txt
.
Теперь я хочу знать, есть ли команда, с помощью которой я могу исключить определенные расширения?
Например, я не хочу видеть файлы с расширением .exe
, как я могу это сделать?
DIR не позволит вам сделать то, что вы пытаетесь. Однако DIR в сочетании с FINDSTR может решить эту задачу.
Например, следующая команда игнорирует все файлы .txt в выводе DIR.
dir | findstr /v /i "\.txt$"
dir /B | find /V ".txt"
Это перечислит все файлы, а find отфильтрует все, что не содержит “.txt”. Это далеко не идеальный вариант, но, возможно, этого достаточно 🙂
Это зависит от вашего командного интерпретатора.
В cmd
от Microsoft нет такой функции, как видно из других ответов, где необходимо предварительно обработать вывод dir
. Однако инструмент от JP Software’s TCC/LE имеет эту функцию. Она называется диапазон исключения файлов и используется следующим образом для примера из вашего вопроса:
dir /[!*.exe] *
Для этой цели определите макрос с помощью DOSKEY
. Я исключил директории и игнорировал регистр — YMMV. Кроме того, /B
кажется самым разумным параметром DIR
для фильтрации, /D
и /W
не подойдут для этой задачи, а длинные форматы /N
(по умолчанию) и /X
содержат, в некоторых случаях, дополнительный текст после имени файла (для символических ссылок). Проверьте это в командной строке:
DOSKEY FIR=DIR/B/A-D^|FINDSTR /VIE $*
DOSKEY FLIR=DIR/X/A-D^|FINDSTR /VIE $*
FIR
для фильтрованного DIR
, поняли? 🙂 А FLIR
для длинной версии, если нужно. Затем используйте это так:
fir .jpg
flir jpg
fir "jpg htm"
Последний пример связан с тем, как FINDSTR
читает шаблоны, переданные в качестве аргументов, как описано в /?
. Только первый аргумент рассматривается как шаблон, дополнительные интерпретируются как имена файлов, даже при работе в конвейере.
Я предпочитаю FINDSTR
простому FIND
, потому что у него есть переключатель /E
, который фильтрует только в конце строки, что, по-моему, предпочтительнее при фильтрации по расширению файла (но опять же, YMMV).
Полезный сайт SS64 объясняет, как настроить макросы в текстовом файле для постоянного использования. Учтите, что не нужно использовать каретку ^
для экранирования специальных символов для макросов, хранящихся в текстовом файле.
Чтобы понять основы работы макросов (“Консольные псевдонимы”) изнутри, прочитайте короткие комментарии Эрика Суна на SO.
Обходной путь — использовать Notepad++
Удерживайте alt и выбирайте ваши имена файлов/текста из вывода команды dir и вставьте в Notepad++
Закладка строк с текстом, который вы хотите или не хотите, а затем удаление закладок или незакладок в меню поиска.
Ответ или решение
К сожалению, в командной строке Windows (cmd) команда DIR не поддерживает прямое исключение файлов по расширениям. Тем не менее, есть способы обойти это ограничение с помощью дополнительных инструментов и команд, таких как FINDSTR. В этой статье мы рассмотрим, как использовать эти команды для создания списка файлов, исключая определенные расширения.
Использование команды DIR и FINDSTR
Если вам нужно отобразить все файлы в текущем каталоге, за исключением файлов с определенным расширением, вы можете воспользоваться следующей командой:
dir | findstr /v /i "\.exe$"
Объяснение команд:
dir
: Эта команда выводит список всех файлов и папок в текущем каталоге.|
: Символ пайпа, который позволяет использовать вывод одной команды в качестве ввода для другой.findstr
: Это команда, предназначенная для поиска строк в текстовом файле./v
: Эта опция заставляет команду искать только те строки, которые не содержат указанный текст (в данном случае, строки с.exe
)./i
: Этот параметр игнорирует регистр символов.
Таким образом, команда dir | findstr /v /i "\.exe$"
будет выводить все файлы, игнорируя файлы с расширением .exe
.
Альтернативный вариант: Использование DOSKEY для упрощения команд
Для повышения удобства использования данной команды можно определить макрос с помощью DOSKEY и легко фильтровать файлы по расширениям. Например:
DOSKEY FIR=DIR/B/A-D | FINDSTR /VIE $*
Как это работает:
FIR
: Имя макроса, который вы создаете.DIR/B/A-D
: Эта команда выводит список файлов без дополнительной информации и игнорирует папки.FINDSTR /VIE $*
: Этот параметр позволяет вводить набор расширений для исключения.
Теперь вы можете использовать созданный макрос следующим образом:
fir .jpg
Эта команда будет выводить все файлы, за исключением тех, которые имеют расширение .jpg
.
Использование альтернативных оболочек
Если команда CMD не покрывает все ваши потребности, рассмотрите возможность использования альтернативных оболочек, таких как TCC/LE от JP Software. Эта оболочка поддерживает более сложные функции, в том числе исключение файлов по расширению напрямую через команду:
dir /[!*.exe] *
Заключение
Хотя команда DIR в Windows не предоставляет возможности исключить файлы определенных расширений напрямую, вы все равно можете использовать комбинацию DIR и FINDSTR, а также настраиваемые макросы через DOSKEY для достижения этой цели. Если вам необходимы более продвинутые функции фильтрации, стоит рассмотреть использование альтернативных командных интерпретаторов. Оптимизированный подход к использованию командной строки может значительно улучшить вашу эффективность при управлении файлами в Windows.