Wie kann ich den folgenden Code ändern, um alle .log-Dateien im Verzeichnis und nicht nur die eine Datei anzuzeigen?
Ich muss alle Dateien durchlaufen und alle Zeilen löschen, die nicht "step4" oder "step9" enthalten. Derzeit wird dadurch eine neue Datei erstellt, aber ich bin mir nicht sicher, wie ich die for each
Schleife hier verwenden soll (Neuling).
Die tatsächlichen Dateien heißen wie folgt : 2013 09 03 00_01_29.log . Ich möchte, dass die Ausgabedateien sie entweder überschreiben oder den gleichen Namen mit "out" anhängen.
$In = "C:\Users\gerhardl\Documents\My Received Files\Test_In.log"
$Out = "C:\Users\gerhardl\Documents\My Received Files\Test_Out.log"
$Files = "C:\Users\gerhardl\Documents\My Received Files\"
Get-Content $In | Where-Object {$_ -match 'step4' -or $_ -match 'step9'} | `
Set-Content $Out
powershell
user2725402
quelle
quelle
BaseName
mitFullName
ich bekommen , was ich will.Um den Inhalt eines Verzeichnisses abzurufen, können Sie verwenden
Dann können Sie auch diese Variable durchlaufen:
Ein noch einfacherer Weg, dies
foreach
auszudrücken, ist die Schleife (dank @Soapy und @MarkSchultheiss):quelle
$files = Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\" $files | Where-Object { $outFile = $_.Name + "out" Get-Content $_.FullName | Where-Object { $_ -match 'step4' -or $_ -match 'step9' } | Set-Content $outFile }
foreach ($f in Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\") { ... }
ForEach ($f in $files){...}
Wenn Sie eine rekursive Schleife in einem Verzeichnis für einen bestimmten Dateityp durchführen müssen, verwenden Sie den folgenden Befehl, der alle Dateien des
doc
Dateityps filtert$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Wenn Sie die Filterung für mehrere Typen durchführen müssen, verwenden Sie den folgenden Befehl.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Jetzt
$fileNames
fungieren Variablen als Arrays, aus denen Sie Ihre Geschäftslogik schleifen und anwenden können.quelle
-Force
Parameter Get-ChildItem verwenden. Siehe das Dokument unter docs.microsoft.com/en-us/powershell/module/… .Andere Antworten sind großartig, ich möchte nur hinzufügen ... einen anderen Ansatz, der in PowerShell verwendet werden kann: Installieren Sie GNUWin32-Dienstprogramme und verwenden Sie grep, um die Zeilen anzuzeigen / die Ausgabe in die Datei http://gnuwin32.sourceforge.net/ umzuleiten.
Dadurch wird die neue Datei jedes Mal überschrieben:
Dadurch wird die Protokollausgabe angehängt, falls Sie die Anmeldedatei überschreiben und die Daten behalten möchten:
Hinweis: Um GNUWin32-Utils global verwenden zu können, müssen Sie den Ordner bin zu Ihrem Systempfad hinzufügen.
quelle