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

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

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

1 ответ1

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .