Ich habe einen Verzeichnisbaum, der ca. 150 Dateien mit einer bestimmten Erweiterung ( .php
) enthält, die in verschiedenen Ordnern organisiert sind. Einige dieser Dateien sind in Zeile 2 markiert, um einen bestimmten Status anzuzeigen. Ich weiß, dass diese Markierung immer in Zeile 2 steht und immer einem bestimmten Format folgt.
Ich suche nach etwas (einem Befehl, einem Skript, einem Programm), das das Verzeichnis nach dieser Markierung durchsuchen und mir eine Ausgabe wie diese liefern kann, allerdings in einem leicht zu bearbeitenden Format:
Eine ideale Lösung wäre eine, die eine Liste ALLER .php
Dateien bereitstellen kann, wobei Zeile 2 der Datei neben dem Dateinamen steht. Die obige Liste tut dies nur für übereinstimmende Dateien.
Ich habe versucht, Folgendes find
in einer for
Schleife zu verwenden:
for %f in (*.php) do find "Oracle Status" %f
Dabei wird allerdings nur das aktuelle Verzeichnis durchsucht und nicht auf benutzerfreundliche Weise formatiert.
Antwort1
Wenn Sie mit der Verwendung von PowerShell vertraut sind, sollte dieses Skript funktionieren:
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]}
}
}
Die Ausgabe sieht in der Konsole folgendermaßen aus:
Die hier gezeigte Version hat .txt
mit einer Zeile nach Dateien gesucht Status:
, aber die oben eingefügte Version macht, was Sie wollen.
Speichern Sie das Skript als .ps1
Datei, z. B. phpstatus.ps1
. Wenn Sie noch nie ein PowerShell-Skript ausgeführt haben, müssen Sie diesen Befehl einmal ausführen, um die Ausführung von Skripten zu ermöglichen:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Sobald dies erledigt ist, können Sie das Skript aus einer PowerShell-Eingabeaufforderung aufrufen, indem Sie .\
gefolgt von seinem Namen eingeben, z. B. .\phpstatus.ps1
. (Die Tab-Vervollständigung funktioniert.) Da die Ausgabe eine Sammlung von PowerShell-Objekten ist, können Sie darauf standardmäßige PowerShell-Datenverwaltungsbefehle verwenden.