Findstr: сопоставить имена файлов, содержащие ровно одну точку

396
Kapt.Brackbier

Я отчаянно пытаюсь найти все файлы в папке и ее подкаталогах, содержащих ровно одну точку. Читая документацию по findstr, я придумал этот тип регулярных выражений, но он по-прежнему совпадает со всеми именами файлов, содержащими точки. В моем понимании построенное мной регулярное выражение должно звучать так: «Любые символы, кроме точек, затем требуется одна точка, затем снова любые символы, кроме точек».

where /r directory *.* | findstr /irc:"[^\.]*\.[^\.]*" 

Я знаю, что могу установить grep, но мне нужно решение, которое работает из коробки.

0

1 ответ на вопрос

0
Kapt.Brackbier

Хорошо, я нашел решение сам.

При [class]*совпадении с нулем или более вхождений это выражение сопоставлялось, когда в имени файла была хотя бы одна (в отличие от ровно одной) точка.

Чтобы он совпадал ровно с одним, необходимо указать положение точки. В моем случае я просто добавил спецификаторы положения «^» (начало строки) и «$» (конец строки), так что теперь регулярное выражение переводится в «Строки с ровно одной точкой где-нибудь между началом и концом строки». линия"

where /r directory *.* | findstr /irc:"^[^\.]*\.[^\.]*$" 

Похожие вопросы