WinFuture-Forum.de: Dateien löschen mit bestimmtem Änderungsdatum - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Dateien löschen mit bestimmtem Änderungsdatum


#1 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 04. Februar 2022 - 10:53

Hallo liebe Forenuser,

ich muss Excel- und Worddateien löschen, die älter sind, als 1.01.2012.
Daher habe ich testweise zunächst mal ein Script genutzt, welches nach diesen Dateien sucht.
Das funktionierte sehr gut...
Ds Script muss aber jetzt angepaßt werden, damit die Dateien auch gelöscht werden können.
Ich habe den Code nun durch den Zusatz "remove-item -Force -whatif" erweitert, um die Dateien löschen zu können. Hier bin ich aber nicht sicher, ob der Code so korrekt ist.

Hier mal der bestehende Code:


Add-Type -A System.IO.Compression
Add-Type -A System.IO.Compression.FileSystem

$folder = 'S:\'
$exclude = 'Archiv\\Datenschutz|Archiv\\Puetz\\Nachlässe|ADMIN\\S E C U R I T Y'
$date = Get-Date '01.01.2012'

# Nur Excel-Dokumente mit Änderungsdatum älter als $date suchen
Get-ChildItem $folder -File -Filter '*.xls?' -Recurse | 
    Where-Object { ($_.LastWriteTime -lt $date) -and (($_.Fullname -notmatch $exclude)) } | 
        Select-Object -ExpandProperty Fullname | 
            remove-item -Force -whatif


# Nur Word-Dokumente mit Änderungsdatum älter als $date suchen
Get-ChildItem $folder -File -Filter '*.doc?' -Recurse | 
    Where-Object { ($_.LastWriteTime -lt $date) -and (($_.Fullname -notmatch $exclude)) } | 
        Select-Object -ExpandProperty Fullname | 
            remove-item -Force -whatif



Würde durch den Zusatz "-whatif" zunächst mal nur ein Testlauf gemacht? So habe ich es jedenfalls verstanden.
Und eine weitere Frage wäre, wie ich die Eingabe machen muss, wenn ich im Bereich der Word-Dokumente nicht nur nach ".doc" Dateien suchen möchte, sondern zusätzlich auch nach ".bak" Dateien.

Hierzu hätte ich folgenden Code-Vorschlag (hier mal nur die Word-Dokumente):


Add-Type -A System.IO.Compression
Add-Type -A System.IO.Compression.FileSystem

$folder = 'S:\'
$filter = '*.doc?, *.bak?'
$exclude = 'Archiv\\Datenschutz|Archiv\\Puetz\\Nachlässe|ADMIN\\S E C U R I T Y'
$date = Get-Date '01.01.2012'

# Nur Word-Dokumente mit Änderungsdatum älter als $date suchen
Get-ChildItem $folder -File $_ -Filter $filter | -Recurse | 
    Where-Object { ($_.LastWriteTime -lt $date) -and (($_.Fullname -notmatch $exclude)) } | 
        Select-Object -ExpandProperty Fullname | 
            remove-item -Force -whatif



In diesem Code habe ich oben zusätzlich "$filter" eingesetzt und im Code weiter unten dann den Zusatz "$_ -Filter $filter".

Würde mich über Eure Hilfe sehr freuen.

Danke und Grüße,
BN

Dieser Beitrag wurde von BN_2022 bearbeitet: 04. Februar 2022 - 10:55

0

Anzeige



#2 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.225
  • Beigetreten: 20. August 18
  • Reputation: 254
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 06. Februar 2022 - 22:40

Also nach kurzer Internet Recherche simuliert der whatif parameter die eigentliche Aktion und führt sie nicht aus. Aber selbst noch nie benutzt.

Teste es doch einfach aus.
Ich glaube der Syntax zum löschen ist schon ok, aber du kannst das "Select-Object -ExpandProperty Fullname" weg lassen, da das nur die Ausgabe schön macht, aber für das löschen nicht relevant ist.
... aber bitte vorher ein Backup machen! ;-)
0

#3 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 07. Februar 2022 - 09:07

Danke für Deine Hilfe.

Habe ich denn auch den Teil mit dem Filter als Code korrekt eingetragen?
Also den Filter, mit dem ich gleichzeitig nach ".doc"-Dateien und ".bak"-Dateien suche?

Danke und Gruß,
BN
0

#4 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 07. Februar 2022 - 15:39

Leider funktioniert das nicht.

Habe es jetzt mal mit Robocopy versucht, indem ich zunächst die gefundenen Dateien in ein anderes Verzeichnis verschiebe und dieses im Anschluss lösche.

Hier mal der Code, der die Dateien verschieben soll:

mkdir S:\Test3
robocopy.exe S:\Test\*.xls* S:\Test3 /E /MOVE /maxlad:20210101 /R:1 /W:1 /LOG+:S\Test3\LOG.txt
robocopy.exe S:\Test\*.doc* S:\Test3 /E /MOVE /maxlad:20210101 /R:1 /W:1 /LOG+:S\Test3\LOG.txt
robocopy.exe S:\Test\*.wbk* S:\Test3 /E /MOVE /maxlad:20210101 /R:1 /W:1 /LOG+:S\Test3\LOG.txt
robocopy.exe S:\Test\*.bak* S:\Test3 /E /MOVE /maxlad:20210101 /R:1 /W:1 /LOG+:S\Test3\LOG.txt
robocopy.exe S:\Test\*.dot* S:\Test3 /E /MOVE /maxlad:20210101 /R:1 /W:1 /LOG+:S\Test3\LOG.txt



Leider tut sich auch hier nichts.
Eigentlich meint "/maxlad:20210101" doch alle Dateien, auf die am letzten Mal am 1.01.2021 zugegriffen wurde... oder nicht?

Wenn ich diese Batch ausführe, passiert nichts.

Grüße,
BN
0

#5 Mitglied ist offline   egal8888 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.036
  • Beigetreten: 23. September 10
  • Reputation: 25
  • Geschlecht:Männlich

geschrieben 08. Februar 2022 - 15:28

Beitrag anzeigenZitat (BN_2022: 07. Februar 2022 - 15:39)

Leider tut sich auch hier nichts.
Eigentlich meint "/maxlad:20210101" doch alle Dateien, auf die am letzten Mal am 1.01.2021 zugegriffen wurde... oder nicht?

In Deinem Eingangspost hast Du aber geschrieben, dass Du Dateien löschen willst, die älter als 01.01.2012 - und nicht Dateien, auf die am letzten Mal am 01.01.2021 zugegriffen wurde.

Wenn Du das aus Deinem Eingangspost erreichen willst, musst Du den Parameter /minage statt /maxlad nutzen.

0

#6 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 09. Februar 2022 - 09:03

Danke für den Hinweis.

Habe meinen Code jetzt mal ganz verändert und da ich ein Datum angeben will, wäre "minage" auch nicht gegangen. Habe aber jetzt die Angabe "minlad" gefunden und hoffe, dass dies das richtige Ergebnis bringen könnte.

Hier mein Code:

@ echo off

Set Quelle="\\dasfile2\daten\Test"
Set Ziel="\\dasfile2\daten\Test3"
Set Dateien="*.xls*, *.doc*, *.wbk*, *.bak*, *.dot*"
Set Ausschluss="\\dasfile2\daten\Test\U1\UU1"
Set Log="\\dasfile2\daten\Test3\LOG.txt"

mkdir \\dasfile2\daten\Test3
robocopy.exe %Quelle% %Ziel% %Dateien% /E /MOVE /XD %Ausschluss% /minlad:20210101 /L /R:1 /W:1 /LOG+:%Log%



Über "minlad:20210101" (Minimales Datum des letztes Zugriffs) werden Dateien ausgeschlossen, die seit dem 1.01.2021 verwendet wurden.

Da war ich mir noch nicht so recht sicher, ob das für mein Vorhaben so korrekt ist. Es sollte ursprünglich ja so sein, dass alle Dateien, die zum letzten Mal vor dem Datum verwendet/verändert wurden, gelöscht werden sollen. Das muss man halt auf "minlad" umbrechen... Vielleicht kannst Du / könnt Ihr hier nochmal helfen.

Grüße,
BN
0

#7 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 16. Februar 2022 - 09:18

​Hallo nochmal,

so - endlich habe ich mal Zeit, um die Datei wirklich zu testen.
Es sollen ja alle Excel-/Word Dokumente verschoben werden, die vor dem 1.01.2012 nicht mehr verändert wurden.

Dazu habe ich eine Testumgebung erstellt mit den Verzeichnissen "Test\U1\UU1" und "Test3"

Dann habe ich verschiedene Word- u. Excel-Dokumente in die Verzeichnisse kopiert, wobei manche älter sind als 1.01.2012 und manche neuer.

Nach Ausführen der Batchdatei befand sich im Verzeichnis "Test3" jedoch lediglich das Verzeichnis "U1", welches jedoch vollkommen leer ist.

Wieso wurden keine Dateien in die Verzeichnisse verschoben? :rolleyes:

Hier mal der aktuelle Code, mit dem ich es eben versucht hatte:

Set Quelle="\\dasfile2\daten\Test"
Set Ziel="\\dasfile2\daten\Test3"
Set Dateien="*.xls*, *.doc*, *.wbk*, *.bak*, *.dot*"
Set Ausschluss="\\dasfile2\daten\Test\U1\UU1"
Set Log="\\dasfile2\daten\Test3\LOG.txt"

robocopy.exe %Quelle% %Ziel% %Dateien% /E /MOVE /XD %Ausschluss% /minlad:20120101 /R:1 /W:1 /TEE /LOG+:%Log%



Dem Code nach hätten eine Menge Dateien ins Verzeichnis "Test3" verschoben werden müssen. Das Unterverzeichnis "Test1\U1\UU1" hätte so erhalten bleiben müssen, wie es war (siehe "Ausschluss").

Wo liegt mein Fehler?

Danke und schöne Grüße,
BN

Dieser Beitrag wurde von BN_2022 bearbeitet: 16. Februar 2022 - 09:19

0

#8 Mitglied ist offline   BN_2022 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 01. Februar 22
  • Reputation: 0

geschrieben 16. Februar 2022 - 15:35

OK... Problem hat sich gelöst.

Grüße,
BN
0

#9 Mitglied ist offline   Shannon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 133
  • Beigetreten: 12. Februar 13
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 16. Februar 2022 - 17:23

Zum testen muss man "maxage" anstatt "maxlad" verwenden und
diese Zeile verwnden.

Set Dateien=*.doc* *.wbk* *.xls* *.bak* *.dot*


g.s.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0