Obtener una lista de archivos que coinciden o no coinciden con una consulta en Windows

Obtener una lista de archivos que coinciden o no coinciden con una consulta en Windows

Tengo un árbol de directorios que contiene ~150 archivos con una extensión específica ( .php) organizados en diferentes carpetas. Algunos de estos archivos están marcados en la línea 2 para indicar un estado determinado. Sé que esta marca siempre está en la línea 2 y siempre sigue un formato específico.

Lo que estoy buscando es algo (un comando, un script, un programa) que pueda buscar en el directorio esta marca y darme un resultado como este, pero en un formato fácil de manipular:

salida de ejemplo

Una solución ideal sería aquella que pueda proporcionar una lista de TODOS los .phparchivos, con la línea 2 del archivo al lado del nombre del archivo. La lista anterior hace esto sólo para archivos coincidentes.

Intenté usar finden un forbucle:

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

Pero esto sólo busca en el directorio actual y no lo formatea de forma amigable.

Respuesta1

Si está de acuerdo con el uso de PowerShell, este script debería hacer el trabajo:

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

Produce una salida similar a esta en la consola:

resultados

La versión que se muestra aquí buscó .txtarchivos con una Status:línea, pero la pegada arriba hace lo que usted quiere.

Guarde el script como un .ps1archivo, por ejemplo phpstatus.ps1. Si nunca antes ha ejecutado un script de PowerShell, deberá ejecutar este comando una vez para permitir la ejecución de scripts:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Una vez hecho esto, puede invocar el script desde un mensaje de PowerShell escribiendo .\seguido de su nombre, por ejemplo .\phpstatus.ps1. (La finalización con tabulación funciona). Dado que el resultado es una colección de objetos de PowerShell, puede usar comandos estándar de administración de datos de PowerShell en ellos.

información relacionada