• Beitrags-Kategorie:Allgemein
  • Lesedauer:4 min Lesezeit

Ich bin ein Fan von dem leistungsstarken Windows-Kopierprogramm robocopy. Das Windows-Kommandozeilen-Tool von Microsoft wird normalerweise zum Kopieren und Synchronisieren von Verzeichnissen verwendet. Doch robocopy kann mehr als nur Daten von A nach B zu kopieren und kann damit das Leben eines Administrators erheblich leichter machen.

Löschen mit robocopy /MIR

Als Administrator kennt man das Problem. Durch einen Fehler in der Access Control List (ACL) oder fehlerhaften Berechtigung kann auf Unterordner nicht zugegriffen und daher auch nicht gelöscht werden. Was tun?

  • Option A: ACL und Owner von jedem betroffenen Unterordner einzeln finden und umstellen
  • Option B: robocopy verwenden. 🙂

Der Parameter /MIR wird normal für eine Spiegel-Migration von Ordner A nach B verwendet. Löscht also auch Dateien die im Quellverzeichnis nicht mehr vorhanden sind. Das Beste, robocopy ignoriert dabei die ACL und radiert sämtliche Daten von der Platte.

How to

  1. einen leeren Ordner erstellen (mkdir C:\xxx)
  2. robocopy C:\xxx D:\todelete\ /MIR

Anzahl der Ordner und Dateien schnell mit robocopy ermitteln

Es kommt vor, dass Auswertungen von bestimmten Dateipfaden benötigt werden oder man nur allgemein wissen will wie viele Dokumente und Ordner sich unter einem bestimmten Share befinden. Bei einem großen Verzeichnisbaum und vielen Daten kann das mit Get-Childitem sehr lange dauern.

Mit dem Befehl:
robocopy /l /nfl /ndl [ZIELPFAD] \\localhost\C$\nul /e /bytes
erhält man in wenigen Sekunden das gewünschte Ergebnis.

die Parameter erklärt

  • /l : Gibt nur eine Liste der Dateien aus, führt aber keinen Kopiervorgang durch (ähnlich wie ein -whatif)
  • /nfl : Loggt keinen Kopiervorgang außer Fehler
  • /ndl : keine Verzeichnisnamen protokollieren
  • \localhost\C$\nul ist ein Dummy Verzeichnis
  • /e : Kopiert Unterverzeichnisse (auch leere Verzeichnisse).
  • /BYTES : Größe wird in as Bytes angegeben

Beispiel

C:\Windows wird mit dem Befehl in ~2 Sekunden vollständig durchsucht.

Geänderte Dateien finden

Wieder lässt sich robocopy mit dem Parameter /L zweckentfremden. Diesmal lassen wir uns alle geänderten Dateien eines Verzeichnisses ausgeben. Das funktioniert dazu schneller als mit Get-Childitem.

Mit dem folgenden Befehl lassen wir uns alle Dateien ausgeben die seit gestern geändert worden sind.
robocopy C:\Temp NULL /L /S /FP /NS /NC /NDL /XX /NJH /NJS /MAXAGE:$((Get-Date).AddDays(-1) | Get-Date -UFormat "%Y%m%d") | %{$_.trim()}

die Parameter erklärt

  • /L: Gibt nur eine Liste der Dateien aus, führt aber keinen Kopiervorgang durch
  • /S: ignoriert leere Ordner
  • /FP: ohne Fortschrittsanzeige
  • /NS: Dateigrößen werden nicht angezeigt
  • /NC: Dateiklassen werden nicht angezeigt
  • /NDL: Ordnernamen werden nicht angezeigt
  • /XX: Zeigt EXTRA Datei nicht an
  • /NJH: kein Job Header
  • /NJS: keine Job Zusammenfassung
  • /MAXAGE: Dateien ausschließen, die älter als X Tage sind

4 / 5. 1

Schreibe einen Kommentar