FINDSTR может использоваться для фильтрации вывода DIR , чтобы получить требуемый список:
@dir /A-D /B | %SystemRoot%\System32\findstr.exe /I /R /V /C:"^[0123456789][0123456789][0123456789][0123456789][0123456789] [ABCDEFGHIJKLMNOPQRSTUVWXYZ]" >C:\temp\DoesNotMatch.txt
DIR выводит из-за /A-D
только файлы (атрибут, а не каталог) в текущем каталоге в голом формате из-за опции /B
, которая означает только имя файла с расширением файла, но без пути к файлу. Запустите в окне командной строки dir /?
справку по этой команде и ее параметрам.
Этот вывод DIR перенаправляется на FINDSTR с оператором перенаправления |
. Пожалуйста, прочитайте статью Microsoft о Использование операторов перенаправления команд для получения подробной информации.
FINDSTR выполняется без учета регистра из-за /I
поиска по регулярному выражению из-за /R
для строк, соответствующих выражению, указанному в двойных кавычках с параметром /C:
, и выводит инвертированный результат из-за параметра /V
, что означает строки, в которых регулярное выражение не соответствует ни одной строке.
Опция /C:"..."
должна использоваться здесь для указания интерпретируемой строки, поскольку /R
является регулярным выражением, а не литеральной строкой, в противном случае при использовании только "..."
пробел будет интерпретирован как разделитель между двумя регулярными выражениями. искать строки, которые будут ИЛИ применены к каждой строке.
Строка поиска по регулярному выражению выглядит немного странно, поскольку синтаксис регулярного выражения, поддерживаемый FINDSTR , очень ограничен. Запустите в окне командной строки findstr /?
справку по этой команде, ее параметрам и поддержке регулярных выражений. Я рекомендую прочитать дополнительно SS64 - FINDSTR и Каковы недокументированные функции и ограничения команды Windows FINDSTR?
^
... означает начало строки, которая является началом имени файла из-за отсутствия пути к файлу.
[0-9]
может использоваться, но также соответствует ¹
, ²
, ³
. По этой причине [0123456789]
используется для реального соответствия только любому из этих 10 цифр.
Множитель типа {5}
не поддерживается FINDSTR . По этой причине необходимо пять раз написать определение класса символов в поисковом выражении.
Класс символов \s
, соответствующий любому символу пробела в соответствии со стандартом Unicode, не поддерживается FINDSTR . Но вертикальные пробелы недопустимы или очень необычны в именах файлов, символ горизонтальной табуляции не допускается в имени файла, пробел без пробелов возможен в имени файла, но это также не очень обычно. И специальные символы со значениями кода Unicode U + 1680, U + 180E, U + 2000 до U + 2008, скорее всего, также никогда не используются в именах файлов. Таким образом, \s
можно заменить обычным пробелом.
[A-Z]
можно использовать, но также соответствует множеству других символов, таких как ÄäÖöÜü
, чтобы перечислить здесь только некоторые из них. Поэтому лучше использовать [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
для сопоставления без учета регистра только символов ASCII.
Вывод FINDSTR перенаправляется с >
в файл C:\temp\DoesNotMatch.txt
, который перезаписывается в случае уже существующего при выполнении командного файла с этой единственной командной строкой.