У меня есть дерево каталогов, которое содержит ~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.