Obtenha uma lista de arquivos que correspondem/não correspondem a uma consulta no Windows

Obtenha uma lista de arquivos que correspondem/não correspondem a uma consulta no Windows

Eu tenho uma árvore de diretórios que contém cerca de 150 arquivos com uma extensão específica ( .php) organizada em pastas diferentes. Alguns desses arquivos estão marcados na linha 2 para indicar um determinado status. Eu sei que essa marca está sempre na linha 2, e sempre segue um formato específico.

O que estou procurando é algo (um comando, um script, um programa) que possa pesquisar essa marca no diretório e me fornecer uma saída como esta, mas em um formato fácil de manipular:

saída de exemplo

Uma solução ideal seria aquela que pudesse fornecer uma lista de TODOS os .phparquivos, com a linha 2 do arquivo ao lado do nome do arquivo. A lista acima faz isso apenas para arquivos correspondentes.

Eu tentei usar findem um forloop:

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

Mas isso pesquisa apenas o diretório atual e não o formata de maneira amigável.

Responder1

Se você estiver satisfeito com o uso do PowerShell, este script deve fazer o trabalho:

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]}
 }
}

Ele produz uma saída semelhante a esta no console:

resultados

A versão mostrada aqui pesquisou .txtos arquivos com uma Status:linha, mas a colada acima faz o que você deseja.

Salve o script como um .ps1arquivo, por exemplo phpstatus.ps1. Se você nunca executou um script do PowerShell antes, precisará executar este comando uma vez para permitir a execução de scripts:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Feito isso, você pode invocar o script a partir de um prompt do PowerShell digitando .\seguido de seu nome, por exemplo .\phpstatus.ps1, . (A conclusão da guia funciona.) Como a saída é uma coleção de objetos do PowerShell, você pode usar comandos padrão de gerenciamento de dados do PowerShell neles.

informação relacionada