Найти файлы, не соответствующие *_abc.*

В дос, когда я хотел получить список файлов, соответствующих определенному фильтру, я мог использовать что-то вроде:

  • *.* - значит вернуть все
  • *.txt - значит вернуть все файлы с .txt расширение
  • *_abc.* - Возвращает каждый файл, который заканчивается _abc

Мой вопрос, используя эту структуру фильтра DOS, как я могу вернуть все файлы, не соответствующие *_abc.* (Другими словами, вернуть все файлы, чье имя НЕ заканчивается _abc)?

Я не помню, возможно ли это, и мне это нужно, так как компания, с которой я работаю, использует очень старую программу, которая все еще использует эту форму фильтрации команд для выбора файлов для работы с программой. К сожалению, я тоже не может сделать это с помощью пакетной команды... Это должен быть один оператор командной строки.

Спасибо!!!

2 ответа

Решение

Передайте результаты вашего списка в FINDSTR с соответствующей строкой поиска регулярного выражения и /V возможность отфильтровывать совпадающие строки.

dir /b /a-d * | findstr /v /r "_abc\.[^.]*$"

Посмотрите на этот ответ на какой-то не связанный вопрос. Ответ, тем не менее, показывает, как выполнять поиск по именам файлов в формате REGEX, и, конечно, если вы используете REGEX, вы можете легко искать вещи, которые не соответствуют выражению.

/questions/5158513/paketnyij-fajl-regulyarnoe-vyirazhenie-dlya-poiska-fajlov-s-tsifroj-v-imeni/5158523#5158523

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ

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

Другие вопросы по тегам