Kleines Such und Lösch-Script für Datenlöschung erstellen
Hallo liebe User,
habe noch ein weiteres Thema...
Von unserem Serverlaufwerk (S) sollen alle Excel-Listen (*.xls*) gelöscht werden, deren Veränderungs-Datum vor dem 1.01.2012 liegt.
Grds. ist so ein Script ja nicht sooooo ein großes Problem. Aber wie beziehe ich mich in einem Script auf das Veränderungs-Datum - also das Datum, an dem die entsprechenden Dateien das letzte Mal verändert wurden?
Ein zweites Script (viell. geht auch Beides in einem) würde ich brauchen, um auf dem gleichen Laufwerk (S) alle "Word-Serienbrief-Dokumente" aufzuspüren und ebenso zu löschen, wenn sie älter sind, als 1.01.2012.
Hier frage ich mich jedoch, wie sage ich dem Script, dass es Word-Serienbrief-Dokumente suchen soll?
Am liebsten wäre mir eine Batchdatei (od. eben zwei).
Und... JA... ich weiß, dass PowerShell viel besser & neuer ist.
Aber ich kenne mich mit PS halt überhaupt nicht aus - mit Batch aber schon einigermaßen gut.
Grüße von
Yan
habe noch ein weiteres Thema...
Von unserem Serverlaufwerk (S) sollen alle Excel-Listen (*.xls*) gelöscht werden, deren Veränderungs-Datum vor dem 1.01.2012 liegt.
Grds. ist so ein Script ja nicht sooooo ein großes Problem. Aber wie beziehe ich mich in einem Script auf das Veränderungs-Datum - also das Datum, an dem die entsprechenden Dateien das letzte Mal verändert wurden?
Ein zweites Script (viell. geht auch Beides in einem) würde ich brauchen, um auf dem gleichen Laufwerk (S) alle "Word-Serienbrief-Dokumente" aufzuspüren und ebenso zu löschen, wenn sie älter sind, als 1.01.2012.
Hier frage ich mich jedoch, wie sage ich dem Script, dass es Word-Serienbrief-Dokumente suchen soll?
Am liebsten wäre mir eine Batchdatei (od. eben zwei).
Und... JA... ich weiß, dass PowerShell viel besser & neuer ist.
Aber ich kenne mich mit PS halt überhaupt nicht aus - mit Batch aber schon einigermaßen gut.
Grüße von
Yan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1780164636
Url: https://administrator.de/forum/kleines-such-und-loesch-script-fuer-datenloeschung-erstellen-1780164636.html
Ausgedruckt am: 09.04.2025 um 09:04 Uhr
11 Kommentare
Neuester Kommentar
Moin,
immer wieder das gleiche mit dir
. Poste doch erstmal was du schon hast. So aus dem nichts eine Anforderung umzusetzen ist nicht helfen.
Gruß
Doskias
immer wieder das gleiche mit dir
Und... JA... ich weiß, dass PowerShell viel besser & neuer ist.
Einsicht ist immer gutAber ich kenne mich mit PS halt überhaupt nicht aus - mit Batch aber schon einigermaßen gut.
Das ist kein Argument. Das was du hier vorhast, kannst du mit PowerShell in einer Zeile erledigen. Mehr gehen auch, aber es geht auch in einer Zeile. Nutze das um dich mit PS vertraut zu machen und zu lernen. Wenn du immer auf dem Standpunkt PS kann ich nicht so gut wie Batch stehen bleibst, dann wirst du irgendwann vor einem Problem stehen, was du mit Batch nicht lösen kannst und PowerShell zwingend brauchst und dann wird es dir unter Zeitdruck noch schwerer fallen PowerShell zu lernen.Gruß
Doskias
Moin.
(Kommentare lesen!)
Grüße Uwe
Zitat von @Yan2021:
Ob sich das dann auch speziell auf das VERÄNDERUNGS-Datum bezieht, ist mir noch unklar.
Wenn du mal forfiles /? in die Konsole eingegeben hättest, wäre es eigentlich klar gewesenOb sich das dann auch speziell auf das VERÄNDERUNGS-Datum bezieht, ist mir noch unklar.
Auch wenn PowerShell ganz toll ist, wäre mir eine Batch-Lösung lieber. Aber wenn es mit PS einfacher ist... freue ich mich natürlich auch über ein Code-Beispiel mit PS 
(Kommentare lesen!)
Add-Type -A System.IO.Compression
Add-Type -A System.IO.Compression.FileSystem
# Ordner mit Dateien
$folder = 'D:\Mein\Pfad'
# Datum
$date = '2021-01-01'
# alle *.xls? Dateien mit Änderungsdatum älter als $date löschen (zum scharf schalten das -whatif am Ende der Zeile entfernen)
Get-ChildItem $folder -File -Filter *.xls? -Recurse | ?{$_.LastWriteTime -lt (get-date $date)} | remove-item -Force -whatif
# Nur Word-Dokumente mit Serienbrief-Eigenschaften und Änderungsdatum älter als $date löschen (zum scharf schalten das -whatif ganz am Ende entfernen)
Get-ChildItem $folder -File -Filter *.doc? -Recurse | ?{$_.LastWriteTime -lt (get-date $date)} | ?{
$zip = [System.IO.Compression.ZipFile]::OpenRead($_.FullName)
[void][System.IO.Compression.ZipFileExtensions]::ExtractToFile(($zip.Entries | ?{$_.Fullname -eq 'word/settings.xml'}),"$env:Temp\settings.xml")
$zip.Dispose()
([xml](gc "$env:Temp\settings.xml")).settings.mailmerge
rm "$env:Temp\settings.xml" -Force -EA SilentlyContinue
} | remove-item -Force -WhatIf
Grüße Uwe
Zitat von @Yan2021:
Ich nehme an, dass Dein Code für die PowerShell ist (sieht jedenfalls nicht nach Batch-Code aus)
Also wenn du das nicht selbst erkennst dann ist wohl endgültig Hopfen und Malz verloren ...Ich nehme an, dass Dein Code für die PowerShell ist (sieht jedenfalls nicht nach Batch-Code aus)
Wenn ich diese Datei an meine Vorgaben angepaßt habe und dann ausführe, würden mir zunächst mal die Excel- bzw. Word-Serienbrief-Dateien nur aufgelistet, die vor dem entsprechenden Datum verändert wurden?
Joa.Wenn ja - erhalte ich dann eine Textdatei mit den zu löschenden Dateien?
Nein, sie werden so nur in der Konsole angezeigt, kann man aber ganz einfach ändern in dem man das Ergebnis in eine Datei umleitet falls warum auch immer gewünscht.Und nach Entfernung des Code-Zusatzes "-whatif" würden die Dateien dann gelöscht... richtig?
Rischtisch.Nachschlagen schadet übrigens nicht:
Optionen "WhatIf", "Confirm" und "ValidateOnly"
Powershell - Leitfaden für Anfänger
Zitat von @Yan2021:
Das Ganze in eine Textdatei leiten wäre gut, da man sich das Ergebnis dann u.U. auch ausdrucken und prüfen könnte.
Was müßte ich dazu noch ergänzen?
Das Ganze in eine Textdatei leiten wäre gut, da man sich das Ergebnis dann u.U. auch ausdrucken und prüfen könnte.
Was müßte ich dazu noch ergänzen?
Am Anfang des Skripts
Start-Transcript .\log.txt
Stop-Transcript
Oder alternativ die Lösch-CMDLets durch Ausgaben ersetzen
Add-Type -A System.IO.Compression
Add-Type -A System.IO.Compression.FileSystem
# Ordner mit Dateien
$folder = 'D:\Mein\Pfad'
# Datum
$date = '01.01.2021'
# alle *.xls? Dateien mit Änderungsdatum älter als $date löschen (zum scharf schalten das -whatif am Ende der Zeile entfernen)
Get-ChildItem $folder -File -Filter *.xls? -Recurse | ?{$_.LastWriteTime -lt (get-date $date)} | select -Expand Fullname | add-content "D:\mylog_excel.txt"
# Nur Word-Dokumente mit Serienbrief-Eigenschaften und Änderungsdatum älter als $date löschen (zum scharf schalten das -whatif ganz am Ende entfernen)
Get-ChildItem $folder -File -Filter *.doc? -Recurse | ?{$_.LastWriteTime -lt (get-date $date)} | ?{
$zip = [System.IO.Compression.ZipFile]::OpenRead($_.FullName)
[void][System.IO.Compression.ZipFileExtensions]::ExtractToFile(($zip.Entries | ?{$_.Fullname -eq 'word/settings.xml'}),"$env:Temp\settings.xml")
$zip.Dispose()
([xml](gc "$env:Temp\settings.xml")).settings.mailmerge
rm "$env:Temp\settings.xml" -Force -EA SilentlyContinue
} | select -Expand Fullname | add-content "D:\mylog_word.txt"
Ja, du hast Punkt 1 der Grundlagen aus meinem Leitfaden zur Executionpolicy nicht gelesen!
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
Ey, du hast da zwei Dinger oben neben der Nase, benutze sie ab und zu auch mal 🖖😉.
So long. Ich bin raus aus dem Thread, bevor sich @Frank wieder bei mir meldet🤞.
Viel Erfolg.
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
Ey, du hast da zwei Dinger oben neben der Nase, benutze sie ab und zu auch mal 🖖😉.
So long. Ich bin raus aus dem Thread, bevor sich @Frank wieder bei mir meldet🤞.
Viel Erfolg.