Schneller integrierter Befehl zum Abrufen des letzten Änderungsdatums einer Datei in Windows?

591
AlexRamallo

Ich versuche, das letzte Änderungsdatum einer Reihe von Dateien unter Windows abzurufen. Auf GNU-Systemen kann ich einfach so etwas verwenden stat -c %Y.

Ich kenne den wmicBefehl, aber das Problem ist, dass er sehr langsam ist. Auf meinem System ist die Ausführung des Befehls wmic datafile where Name="..." get LastModified /valueetwa vier bis sieben Mal langsamer als bei Verwendung eines Ports von GNU stat in einer MSYS2-Shell.

Für meine Zwecke brauche ich eine Alternative, die schneller und in Windows selbst oder die Visual Studio-Entwicklungstools integriert ist. Das Ausgabeformat ist mir egal, weil ich es manuell analysieren kann.

Weiß jemand, ob so etwas existiert?

1
Sie können fast sicher einen Windows-Port von `stat` finden (suchen Sie nach` "stat.exe" `). Wenn nicht, müssen nur wenige Zeilen geschrieben werden. AFH vor 6 Jahren 0
@AFH Das Problem ist, dass ich eine Lösung benötige, die entweder in Windows oder in die VS-Dev-Tools integriert ist. Ich habe gesucht, aber Wmic ist das einzige, was ich gefunden habe. AlexRamallo vor 6 Jahren 0
Wenn Sie über VS verfügen, schreiben Sie das Programm selbst (rufen Sie `stat ()` oder `lstat ()` auf, je nachdem, wie Sie symbolische Links behandeln möchten). Oder es ist in PowerShell wahrscheinlich unkompliziert, aber ich habe das nie mehr als nur minimal verwendet. AFH vor 6 Jahren 0
Wenn ich "eingebaut" sage, meine ich, dass ich etwas brauche, was bereits verfügbar ist. Natürlich könnte ich selbst schreiben, aber für das, was ich tue, ist das keine geeignete Lösung. Ich schreibe ein Skript, das ich auf mehreren Windows-PCs bereitstellen muss, auf denen mindestens VS dev-Tools installiert sind. Das Bündeln eines ausführbaren Programms oder, noch schlimmer, Quellcode, der erstellt werden muss, wird in meiner speziellen Situation nicht funktionieren. Powershell war etwas, woran ich vorher nicht gedacht hatte, also probierte ich es einfach aus. Leider ist es tatsächlich * viel * langsamer als der Befehl wmic. AlexRamallo vor 6 Jahren 0
Wenn dies im Zusammenhang mit lokalen Sicherheits- oder Virenschutzrichtlinien nicht schwierig ist, kann ich nicht verstehen, warum Sie keine ausführbare Datei mit Ihrem Skript verteilen sollten. Wenn sich die PCs unter Windows 10 befinden, wird das Linux-auf-Windows-Subsystem bereits "stat" sein. Sie können es mit `bash -c` aufrufen, obwohl Sie Linux und nicht den Windows-Dateinamen verwenden müssen. AFH vor 6 Jahren 0

1 Antwort auf die Frage

3
DrMoishe Pippik

Das Window-Befehlszeilen-DIR sollte die Aufgabe erledigen, wenn Sie die Ausgabe nach Feld analysieren können. Leiten Sie die Ausgabe nach Bedarf in eine Datei.

Beispielsweise ordnet dir / o: d / t: w Dateien nach Datum [/ o: d] mit dem zuletzt geschriebenen Feld [/ t: w] an und erzeugt Folgendes:

Verzeichnis von C: \ Intel \ Logs

07.06.2016 22:28 Uhr ..

06.07.2016 22:28 0 IntelCPHS.log

13.05.2017, 10:01 Uhr 767,814 IntelGFX.log

17.10.2017, 10:54 Uhr 51.608 IntelGFXCoin.log

Wenn Sie Zeit für die Sekunde brauchen, versuchen Sie Folgendes:

forfiles / c "cmd / c echo @ datei @ zeit"

Eingabe dir /? um Optionen zum Anzeigen von Dateien bestimmter Attribute, Ausgabeformate usw. anzuzeigen.

Ausgezeichnet - Ich wusste nicht über die @ @ -Optionen in ForFiles. Es ist schade, dass Sie eine neue Kopie von 'cmd' planen müssen, um ein Echo zu erzeugen. In Linux haben 'echo' und einige andere interne Befehle auch externe Binärdateien, um dies zu vermeiden, aber ich kenne keinen Standard-Windows-Befehl, der das Gleiche tut. AFH vor 6 Jahren 0