Получить список файлов, которые соответствуют/не соответствуют запросу в Windows

Получить список файлов, которые соответствуют/не соответствуют запросу в Windows

У меня есть дерево каталогов, которое содержит ~150 файлов с определенным расширением ( .php), организованных в разные папки. Некоторые из этих файлов отмечены на строке 2, чтобы указать определенный статус. Я знаю, что эта отметка всегда находится на строке 2, и она всегда следует определенному формату.

Мне нужно что-то (команду, скрипт, программу), что может выполнить поиск этой метки в каталоге и выдать мне вывод, подобный этому, но в удобном для обработки формате:

пример вывода

Идеальным решением было бы то, которое может предоставить список ВСЕХ файлов .php, со строкой 2 файла рядом с именем файла. Список выше делает это только для совпавших файлов.

Я пробовал использовать findв forцикле:

for %f in (*.php) do find "Oracle Status" %f

Но это позволяет выполнить поиск только в текущем каталоге и не форматирует его должным образом.

решение1

Если вы умеете пользоваться PowerShell, то этот скрипт должен справиться с этой задачей:

Get-ChildItem *.php -Recurse | ForEach-Object {
 $lines = Get-Content $_ -TotalCount 2
 If ($lines.Length -GT 1 -And $lines[1].Length -GT 1 -And $lines[1].Contains('Oracle Status:')) {
  New-Object -TypeName PSObject -Prop @{'FilePath' = $_.FullName; 'StatusLine' = $lines[1]}
 }
}

В консоли выводится следующий вывод:

Результаты

Показанная здесь версия искала .txtфайлы со Status:строкой, но вставленная выше версия делает то, что вам нужно.

Сохраните скрипт как .ps1файл, например phpstatus.ps1. Если вы никогда раньше не запускали скрипт PowerShell, вам нужно будет выполнить эту команду один раз, чтобы разрешить выполнение скриптов:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

После этого вы можете вызвать скрипт из командной строки PowerShell, .\введя его имя, например .\phpstatus.ps1. (Работает автодополнение клавишей Tab.) Поскольку вывод представляет собой коллекцию объектов PowerShell, вы можете использовать для них стандартные команды управления данными PowerShell.

Связанный контент