
Auf meinem Hauptcomputer mit Windows 10 mache ich mit Steam viele Screenshots von Videospielen. Im Screenshot-Ordner von Steam ( Steam\userdata\<user_id>\760\remote
) wird für jedes Spiel ein neuer Ordner erstellt, der wiederum einen screenshots
Ordner enthält, der dann die Screenshots enthält, die Sie gemacht haben.
Diese Screenshots habe ich einmal in Google Photos gesichert. Um die Screenshots mit dem richtigen Datum hochladen zu können, habe ich mit exiftool bei allen zu diesem Zeitpunkt vorhandenen Bilddateien die Eigenschaft „Aufnahmedatum“ gesetzt.
Ich habe diese Dateien nach dem Hochladen nicht gelöscht, da ich weiterhin möchte, dass Steam sie erkennt.
Seitdem habe ich weitere Screenshots gemacht und möchte diese neuen hochladen, ohne die bereits hochgeladenen erneut hochzuladen (Google erkennt sie als Duplikate, aber bei 165 Ordnern und Zehntausenden von Bildern ist es trotzdem eine Verschwendung meiner Bandbreite und Zeit).
Der einzige Unterschied, der mir zwischen den neuen Screenshots und den zuvor hochgeladenen einfällt, ist, dass den neuen die Eigenschaft „Aufnahmedatum“ fehlt. Ich habe das Datum, an dem ich die letzte Ladung hochgeladen habe, nicht zur Hand, und obwohl ich es vielleicht von Google Fotos bekommen könnte, möchte ich das lieber nicht.
Gibt es eine Möglichkeit, einen Ordner der obersten Ebene rekursiv nach Dateien zu durchsuchen, denen eine bestimmte Eigenschaft fehlt?
Antwort1
Ich konnte eine ähnliche Frage finden, die mir dabei half, herauszufinden, wie es geht.
Holen Sie sich die im Reiter „Details“ aufgelisteten Attribute mit Powershell
Die Antwort auf diese Frage enthält einen Link zu einem Microsoft Dev-Blog, in dem der Autor auf ein Skript verweist und erklärt, wie man damit Eigenschaften aus einer rekursiven Dateiliste abruft.
Die genauen Schritte, die ich unternommen habe, waren wie folgt:
- Heruntergeladen dieGet-FileMetaDataReturnObject.ps1Skriptaus der TechNet-Galerie.
- In einem Powershell-Fenster mit Administratorrechten habe ich mir selbst die Berechtigung erteilt, mit dem Befehl nicht signierte Skripts auszuführen
Set-ExecutionPolicy Unrestricted
. - Ich habe das Skript mit dem Befehl in den Speicher geladen
C:\Users\<username>\Desktop\Get-FileMetaDataReturnObject.ps1
. - Ich habe mit dem Befehl ein Objekt erstellt, das alle Metadateneigenschaften für jeden Ordner und jede Datei im Ordner „Screenshots“ enthielt
$fileMeta = Get-FileMetaData -folder (gci "C:\Program Files (x86)\Steam\userdata\<user_id>\760\remote" -Recurse -Directory).FullName
.Dies hat auf meinem Rechner drei Stunden gedauert. - Anschließend habe ich mit dem Befehl die spezifischen Eigenschaften exportiert, die ich benötigte
$fileMeta | select Path, Kind, "Date taken" | Export-Csv -Path "C:\Users\<username>\Desktop\screenshots.csv" -Encoding ASCII -NoTypeInformation
. - Ich habe in Notepad++ alle Zeilen markiert, die die Wörter
thumbnails
(um den automatisch erstellten Unterordner mit den Miniaturansichten zu ignorieren, den Steam erstellt hat),Folder
(um Ordner allgemein zu ignorieren) und,"?
(aus irgendeinem Grund konnte Powershell die Daten anscheinend nicht richtig analysieren und hat an den Anfang jedes Datums ein Fragezeichen angehängt, aber so konnte ich Nullwerte leicht herausfiltern) enthielten, und sie gelöscht. - Dann blieb mir eine Liste mit Dateien übrig, die in Google Photos gesichert werden mussten.
Es wäre wahrscheinlich einfacher, einfach das letzte Upload-Datum beizubehalten und den Windows-Suchbefehl zu verwenden datecreated: d/m/yyyy .. d/m/yyyy
(Bereich zwischen dem letzten Upload-Datum und jetzt, im australischen Format), aber beide Methoden erfordern ein wenig Herumprobieren, um Dinge herauszufiltern, die Sie nicht benötigen, wie z. B. Miniaturansichten, und gleichzeitig die Organisation beizubehalten (d. h. aus welchem Spiel jeder Screenshot stammt).