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"}

Einen IP-Bereich per Batch pingen

Keine Tools zur Hand und dann mal eben einen IP-Bereich nach (nicht) erreichbaren Hosts prüfen!?
Per Batchskript funktioniert das wie folgt:

1
2
3
4
5
6
7
8
9
@ECHO OFF
SET /p start=Erste IP-Adresse: 192.168.0.
SET /p ende=Letzte IP-Adresse: 192.168.0.
 
ECHO Pinge IP-Adressen von %start% bis %ende%.
 
FOR /L %%i IN (%start% 1 %ende%) DO PING -n 1 192.168.0.%%i
 
PAUSE

Der Haken an diesem Cmdskript ist die Laufzeit, denn der Timeout dauert pro Computer ein wenig, obwohl immer nur ein Versuch gemacht wird.

Trotzdem eine valide Notlösung! ;-)

Datetime zu Unix-Timestamp umwandeln

Heute musste ich mir eine Funktion für Visual Basic Script schreiben, welche mir das aktuelle Datum und die Uhrzeit in einen Unixtimestamp konvertiert.

VB-Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function DateTime2UnixTimestamp (intJahr,intMonat,intTag,intStunde,intMinute,intSekunde)
	' Fixe Variablen definieren
	intSekundenProTag = 24 * CLng(3600)
	datBeginnDatum = DateSerial(1970, 1, 1)
 
	' Zu Datum zusammensetzen
	datDatum = DateSerial(intJahr, intMonat, intTag)
	' Differenz seit 01.01.1970 in Tagen errechnen
	intTage = datDatum - datBeginnDatum
 
	' Zeitangebe in Sekunden umrechnen
	datDatumInSekunden = (intStunde * 3600) + (intMinute * 60) + intSekunde
 
	' Gesamtergebnis ausgeben
	DateTime2UnixTimestamp = ((intTage * intSekundenProTag) + datDatumInSekunden)
End Function
 
Wscript.echo DateTime2UnixTimestamp(2009, 12, 31, 13, 53, 24)