Ich möchte Inhalte aus Dateien in einem Ordner (ignorieren die Kopfzeilen, da einige Datei möglicherweise nur die Kopfzeile enthalten). Aber in der Ausgabe möchte ich den Dateinamen angeben, von dem die Zeile gelesen wird. Bisher habe ich folgendes:Include Dateiname in der Ausgabe
Get-ChildItem | Get-Content | Where { $_ -notlike "HEADER_LINE_TEXT" } | Out-File -FilePath output_text.txt
Ich habe versucht, mit dem Erstellen einer Variable im Block Wo zu arbeiten, $filename=$_.BaseName
, und es in der Ausgabe verwenden, aber das hat nicht funktioniert.
EDIT:
ich mit folgendem endete:
Get-ChildItem -Path . | Where-Object { $_.FullName -like "*records.txt"; $fname=$_FullName; } | Get-Content | Select-Object { ($fname + "|" + $_.Trim()) } | Where { $_ -notlike "*HEADER_LINE_TEXT*" } | Format-Table -HideTableHeaders | Out-File -FilePath output_text.txt
Das sieht langwierig und kann wahrscheinlich kürzer und klarer gemacht werden. Kann mir jemand helfen, das etwas aufzuräumen? Ich poste entweder die Lösung oder stimme für eine sauberere Lösung, wenn eine gepostet wird. Vielen Dank.
Danke, @BenH. Ich wollte es nicht wirklich als eine einzige Linie behalten. Ihre vorgeschlagene Lösung im ersten Codeblock hat für mich funktioniert. –
Beide Ansätze funktionieren und haben Vor-/Nachteile. Aber ich stimme zu, dass der erste Ansatz das ist, was ich verwenden würde, weil ich der Lesbarkeit und der einfachen Modifikation Vorrang gebe, wann immer es sinnvoll ist. Froh, es hat geklappt:) – BenH