Strings suchen und ersetzen in mehreren Dateien

In mehreren Dateien soll ein bestimmter Text gesucht und falls vorhanden ersetzt werden und gerade kein Tool zur Hand? Die Powershell kann das!

Snippet:

1
Get-ChildItem *.dat | Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {$_.Replace("altes Haus","neues Schloß")} | Set-Content $_}

Achtung:
Die ursprüglichen Dateien werden dabei überschrieben!

Strings suchen und ersetzen in einer Datei

In einer Datei soll ein bestimmter Text gesucht und falls vorhanden ersetzt werden und gerade kein Tool zur Hand? Die Powershell kann das auch!

Snippet:

1
Get-Content "D:\Test.txt" | Foreach-Object {$_.Replace("Alt","Neu")} | Set-Content "D:\Test_Neu.txt"

Hier wird einfach der Inhalt der Datei “Test.txt” eingelesen und durchlaufen. Kommt der String “Alt” vor so wird dieser durch “Neu” ersetzt. Anschließend wird die Datei komplett in eine neue (“Test_Neu.txt”) geschrieben.

Dateien finden die in den letzten 15 Minuten bearbeitet wurden

Möchte man wissen welche Dateien in einem Verzeichnis innerhalb der letzten X Minuten bearbeitet oder erstellt wurden, so hilft das folgende Snippet:

1
Get-ChildItem -Recurse E:\ | Where-Object {$_.LastWriteTime -gt (Get-Date).AddMinutes(-15)}

Das funktioniert auch mit Stunden oder Jahren. Einfach “AddMinutes” durch “AddHours” oder “AddYears” ersetzen.

Möglich wäre auch:

1
Get-ChildItem -Recurse E:\ | Where-Object {$_ .lastwritetime –lt "2008/1/12"}

Powershellskript direkt aufrufen

Bei den älteren Skriptsprachen wie Batch oder Visual Basic Script war der Aufruf immer sehr einfach per Doppelklick möglich. Die Powershell erlaubt das so erst mal nicht mehr. Der folgende Aufruf zeigt aber, dass es doch noch geht.

Aufruf z.B. für Ausführen oder Eingabeaufforderung:

1
2
powershell.exe -noexit "& X:\My Scripts\Powershell
\TestMe.ps1"

Bestimmte Zeile einer Ausgabe zeigen

Möchte man nur eine bestimmte Zeile einer Befehlsausgabe anzeigen, so kann folgendes helfen:

1
2
$tmp = ping -n 1 localhost
$tmp[5,-1,0]

Hier wird ein ein normaler Ping auf den eigenen PC ausgeführt und die Ausgabe des Ping-Befehls in die Variable “$tmp” gespeichert. Anschließend wird mit “[5,-1,0]” fetgelegt, welche Zeile angezeigt wird.
“$tmp[0]” zeigt dabei z.B. die erste Zeile an, “$tmp[-1]” die letzte Zeile.

Mit Select-String geht das auch, wie ich in einem Beispiel hier gezeigt habe.