Jak mogę zmienić poniższy kod, aby wyświetlić wszystkie pliki .log w katalogu, a nie tylko jeden plik?
Muszę przejść przez wszystkie pliki i usunąć wszystkie wiersze, które nie zawierają „step4” lub „step9”. Obecnie utworzy to nowy plik, ale nie jestem pewien, jak użyć for each
tutaj pętli (nowicjusz).
Rzeczywiste pliki mają następujące nazwy: 2013 09 03 00_01_29.log . Chciałbym, aby pliki wyjściowe albo je nadpisały, albo dodały taką samą nazwę, jak „out”.
$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
użytkownik2725402
źródło
źródło
BaseName
zFullName
dostanę co chcę.Aby uzyskać zawartość katalogu, możesz użyć
Następnie możesz również zapętlić tę zmienną:
Jeszcze łatwiejszym sposobem na umieszczenie tego jest
foreach
pętla (dzięki @Soapy i @MarkSchultheiss):źródło
$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){...}
Jeśli chcesz zapętlić się wewnątrz katalogu rekurencyjnie dla określonego rodzaju pliku, użyj poniższego polecenia, które filtruje wszystkie pliki
doc
typu pliku$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Jeśli musisz wykonać filtrację na wielu typach, użyj poniższego polecenia.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Teraz
$fileNames
zmienna działa jak tablica, z której można zapętlić i zastosować logikę biznesową.źródło
-Force
parametru Get-ChildItem. Zobacz dokumentację na docs.microsoft.com/en-us/powershell/module/… .Inne odpowiedzi są świetne, chcę tylko dodać ... inne podejście przydatne w PowerShell: zainstaluj narzędzia GNUWin32 i użyj grep, aby wyświetlić linie / przekierować dane wyjściowe do pliku http://gnuwin32.sourceforge.net/
Spowoduje to zastąpienie nowego pliku za każdym razem:
To dołącza dane wyjściowe dziennika, na wypadek, gdyby nadpisałeś plik logIn i chcesz zachować dane:
Uwaga: aby móc korzystać z narzędzi GNUWin32 na całym świecie, musisz dodać folder bin do ścieżki systemowej.
źródło