WinFuture-Forum.de: Batch zur Dateilöschung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Batch zur Dateilöschung


#1 Mitglied ist offline   Gordon82 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 09. Dezember 16
  • Reputation: 0

geschrieben 09. Dezember 2016 - 22:00

Moin moin,

ich bin noch recht frisch was das erstellen von Batchdateien angeht, daher bin ich noch am testen und ausprobieren. Ich versuche aktuell eine Batchdatei zu erstellen die im Ordner "Z:\TEST" alle Dateien bis auf die letzten vier (nach Erstelldatum) löscht. Dabei habe ich mir folgendes zum Teil aus dem Netz gesucht und zusammen gebaut:

Z:
cd Z:\
for /f "skip=4 delims=" %%F in ('dir *.* /B /O-D /A-D') do del "%%F"


Die Datei liegt aktuell auf dem Desktop und Z: ist ein Netzlaufwerk. Leider funktioniert sie nicht wirklich. Was mache ich da falsch? Oder gibt es einen einfacheren Weg?

Besten Gruß
Gordon
0

Anzeige



#2 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 09. Dezember 2016 - 22:04

Willkommen im Forum!

Schau dir einmal robocopy /? an
0

#3 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 10. Dezember 2016 - 00:09

Wenn Du grad anfängst damit, wäre imo Powershell für Dich der bessere Ansatz. Damit geht mehr und Du mußt Dich noch nicht umgewöhnen, hast also eine recht gute Ausgangsposition. :)

Mit PS könnte das so aussehen.

$Files = Get-ChildItem -File -Path 'Z:\'
$Files | Sort-Object -Property LastWriteTime | Select-Object -First ( $Files.Count - 4 ) | Remove-Item -WhatIf



- Get-Childitem holt Verzeichniseinträge
-File beschränkt auf Dateien
-Path sagt von wo
- Ergebnis kommt in Variable $Files
- | übergibt Inhalt von $Files an...
- Sort-Object sortiert die Eingabe (=> die Dateiliste)
-Property sagt wonach
-Descending (hier weggelassen) dreht die Sortierordung um (absteigend); kann auch als -Descending:$false angegeben werden
- | übergibt diese (sortierte) Ergebnisliste an...
- Select-Object wählt einzelne Objekte aus der Ergebnisliste
-First X sagt, die ersten X
>> Wir wollen alle Dateien außer die neuesten vier: dazu verwenden wir die Eigenschaft .Count der Ergebnisliste und ziehen 4 ab; da die Liste in $Files nach LastWrite sortiert ist und alle vorhandenen Dateiobjekte beinhaltet, werden also alle bis auf die vier neuesten Elemente ausgewählt
>> Die Klammern um den Ausdruck sind erforderlich, damit PS zuerst den Inhalt derselben berechnet und dann diesen Wert an den Parameter -First binden kann (ohne Klammern wird einfach links-nach-rechts abgearbeitet und -First würde den Wert $Files.Count kriegen und der Rest wäre Syntaxfehler).
- | reicht dieses Ergebnis wieder weiter an...
- Remove-Item entfernt die bezeichnete Objektliste
-WhatIf schaltet die aktive Funktion aus (dry-run, Testlauf) und sagt nur was es tun würde wenn der Schalter nicht da wäre


Mit dem -WhatIf da hinten passiert bei Ausführung nichts. Wenn man es wegnimmt oder ein $False an das -WhatIf dranhängt, werden ohne weitere Nachfrage alle Dateien bis auf die bewußten vier entfernt. -Verbose würde noch Auskunft geben darüber, was gelöscht wird; und -Confirm fragt für jede Datei nochmal nach.

Dieser Beitrag wurde von RalphS bearbeitet: 10. Dezember 2016 - 00:11

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   Gordon82 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 09. Dezember 16
  • Reputation: 0

geschrieben 11. Dezember 2016 - 12:02

Hallo RalphS,

danke dir vielmals für deine ausführliche Erklärung. Das ist super! Klappt auch wunderbar.

Beste Grüße,
Gordon
0

Thema verteilen:


Seite 1 von 1

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