Effiziente Suche nach Dateien in Windows - CMD und PowerShell im Vergleich

Wie kann ich mit CMD oder PowerShell nach Dateien bestimmter Größe und Alters auf meiner Festplatte suchen?

Uhr

Viele Benutzer von Windows stoßen gelegentlich auf die Notwendigkeit, bestimmte Dateien auf ihrer Festplatte zu finden. Tom ´ ein User des Forums ` hat um Hilfe gebeten. Er sucht nach einer Batch-Datei oder einer Kommandozeilenanweisung im CMD. Dabei geht es ihm um Dateien – die kleiner als 500 KB sind. Später will er ebenfalls Dateien finden die älter als 5 Jahre sind.


Es ist bekannt, dass der Befehlszeileninterpreter CMD nicht unbedingt die schnellste Lösung bietet. MCR1P ´ ein weiteren Nutzer ` stimmt dieser Meinung zu. Die Rechenzeit kann bevölkerungsreich sein. Trotzdem kann man erste Schritte unternehmen. Der folgende Befehl, den MCR1P bereitstellt, sucht gezielt nach Dateien die kleiner als 500 KB sind:


FOR /F "delims=" %%A IN ('dir /A-D /B /S "%SystemDrive%\"') DO if %%~zA LSS 512000 echo %%A



Dieser Befehl funktioniert so. Er durchläuft jede Zeile die den DIR-Befehl ausgibt. Überprüft wird, ob die Dateigröße unter 512000 Byte liegt. Das entspricht 500 KB. Eine einfache, obwohl langsame Methode um solche Dateien zu finden – jedoch nicht die einzige.


Nun kommt die Alterssuche ins Spiel. Um zu prüfen ´ ebenso wie alt eine Datei ist ` benötigt man ein entsprechendes Skript. Das Parameter der „Julian Days“ bleibt allerdings unerwähnt. Quellen wie DosTips - The DOS Batch Guide können hier jedoch gute Beispiele liefern. Zudem muss das Datum richtig angegeben werden um die Anpassungen vorzunehmen. Ein grundlegendes Beispiel für den Befehl könnte so aussehen:


Setlocal EnableDelayedExpansion


FOR /F "tokens=1,2,3 delims=./ " %%A IN ('dir /A-D /T:C /S "%SystemDrive%\"') set /a Tag=%%A set /a Monat=%%B set /a Jahr=%%C set /a Alter_in_Tagen= if!Alter_in_Tagen! GTR 1826 echo %%~fA



In diesem Befehl wird die Reihenfolge TT.MM.JJJJ angenommen. Dies ist typisch für ein deutsches System. Für jeden DATEIEN ´ die zurückgegeben werden ` wird das Alter in Tagen berechnet. Ist die Datei älter als 1826 Tage wird die Ergebnisdatei angezeigt.


Die CMD bietet Möglichkeiten freilich sind ihre Grenzen klar. Bei modernen Windows-Versionen ist PowerShell die überlegene Wahl. Ab Windows Vista oder spätestens Windows 7 ist sie standardmäßig verfügbar. PowerShell ist objektorientiert – was die Programmierung erheblich vereinfacht. So kann durchschnittlichen Benutzern eine bessere Handhabung geboten werden. Eine einfache Suche kann hier so aussehen:


Get-ChildItem -Path "C:\" -Recurse | Where-Object { $_.Length -lt 500KB -or $_.LastWriteTime -lt (Get-Date).AddYears(-5) }



Hier werden Dateien erfasst die entweder kleiner als 500 KB sind oder deren Letzte Änderung weiterhin als 5 Jahre zurückliegt. Die Effizienz und die Abfragekraft dieser Shell sind unbestreitbar.


Im Gesamtbild stellt sich heraus, dass CMD und PowerShell verschiedene Ansätze bieten. Wer sich aufkommenden Anforderungen anpassen möchte sollte PowerShell bevorzugen. Der Benutzerfreundlichkeit und der Geschwindigkeit halber ist sie die zeitgemäße Lösung für die Datei- und Altersabfrage.







Anzeige