forfiles: Befehle auf Gruppen von Dateien anwenden

    forfiles mit DatumsfilterFür bestimmte Dateioperationen bietet der Explorer keine effizienten Mittel an, so dass in solchen Fällen der Wechsel auf die Kommandozeile fällig wird. Das gilt etwa dann, wenn man Dateien über mehrere Verzeichnisebenen hinweg nach verschiedenen Kriterien filtern und über diese Liste dann bestimmte Befehle ausführen möchte. Unter Unix existiert zu diesem Zweck das Dienstprogramm find, das sehr mächtig, aber nicht ganz einfach zu benutzen ist. Unter Windows heißt das Gegenstück dazu forfiles, das nur die wichtigsten Funktionen von find beherrscht, aber dafür relativ leicht zu verwenden ist.

    Desktop-Suche ist zu wenig flexibel

    Möchte man sich beispielsweise über die GUI alle Dateien anzeigen lassen, die vor einem bestimmten Datum geschrieben wurden, dann hilft die in Windows eingebaute Suchfunktion mit einem Filter wie

    änderungsdatum: < 06.04.2010

    Die Möglichkeiten zur anschließenden Bearbeitung dieser Liste sind aber relativ beschränkt, man könnte die Dateien löschen, wenn man auf die Ergebnisse der Suche vertraut.

    forfiles übergibt Dateieigenschaften als Argumente an Befehle

    Dagegen kann forfiles Dateien in einem Verzeichnisbaum nach bestimmten Mustern filtern (unter Verwendung der in cmd.exe erlaubten Wildcards) und die Liste der Dateinamen jedem beliebigen Befehl oder Programm übergeben. Besonders interessant ist dabei, dass man Eigenschaften der betroffenen Dateien als Argumente in den Befehl übernehmen kann.

    Wenn man beispielsweise alle Dateien mit der Endung .txt in allen Unterverzeichnissen finden möchte und jene mit einer Dateigröße kleiner als 1000 Byte in Notepad öffnen will, dann erledigt das der folgende Befehl:

    forfiles /S /M *.txt /C "cmd /c if @fsize LSS 1000 notepad @file"

    Die Variablen @fsize und @file stehen für die Dateigröße bzw. den Dateinamen, LSS ist der "kleiner als"-Operator von cmd.exe. Die Option /s steht für das Einbeziehen von Unterverzeichnissen, dem Argument /M folgt das Muster für die Dateinamen und /c spezifiziert den Befehl, der auf die ausgewählten Dateien angewandt werden soll. Im obigen Befehl werden übrigens nicht alle Dateien auf einmal in eigenen Fenstern von notepad.exe geöffnet, sondern eine nach der anderen.

    Übersicht über die Variablen

    Neben den beiden Variablen im obigen Beispiel kann forfiles noch folgende Eigenschaften von Dateien an einen Befehl übergeben:

    VariableInhalt
    @fnameDateinamen ohne Erweiterung
    @extNur die Dateierweiterung
    @pathder absolute Pfad
    @relpathder relative Pfad
    @isdir"TRUE", wenn ein Verzeichnis vorliegt, sonst "FALSE"
    @fsizeDateigröße in Bytes
    @fdatedas letzte Änderungsdatum der Datei
    @ftimedie letzte Änderungszeit der Datei

    Nach Datum filtern

    Eine Option, die häufig in Beispielen für die Verwendung von forfiles genannt wird, kann Dateien nach dem letzten Änderungsdatum filtern. Mit dem Schalter /D übergibt man ein Datum im Format dd.mm.yyyy oder eine Zahl von Tagen, die ab heute zurückgerechnet wird:

    forfiles /D +6.4.2011 /C "cmd /c echo @file wurde nach dem 6.4. verändert"

    forfiles /D -10 /C "cmd /c echo @file wurde vor den letzten 10 Tagen verändert"

    Der Datumsfilter lässt sich einsetzen, um beispielsweise ältere Dateien zu löschen oder zum Archivieren auf einen anderen Datenträger zu verschieben.

    Keine Kommentare