Как найти все файлы в подпапках, у которых отсутствует определенное свойство?

Как найти все файлы в подпапках, у которых отсутствует определенное свойство?

На моем основном компьютере с Windows 10 я делаю много скриншотов видеоигр с помощью Steam. В папке скриншотов Steam ( Steam\userdata\<user_id>\760\remote) создается новая папка для каждой игры, которая сама содержит папку, screenshotsсодержащую сделанные вами скриншоты.

Я когда-то делал резервную копию этих скриншотов в Google Photos. Чтобы скриншоты загружались с правильной датой, я использовал exiftool, чтобы задать свойство «Дата съемки» для всех файлов изображений, которые существовали на тот момент.

Я не удалил эти файлы после загрузки, так как хочу, чтобы Steam их распознал.

С тех пор я сделал еще несколько снимков экрана и хочу загрузить новые, не загружая повторно те, которые уже были загружены (Google распознает их как дубликаты, но это все равно пустая трата моего трафика и времени при наличии 165 папок и десятков тысяч изображений).

Единственное различие, которое я могу придумать между новыми скриншотами и ранее загруженными, заключается в том, что у новых не будет свойства "Дата съемки". У меня нет даты загрузки последней партии, и хотя я мог бы получить ее из Google Photos, я бы предпочел этого не делать.

Есть ли способ рекурсивного поиска файлов в папке верхнего уровня, у которых отсутствует определенное свойство?

решение1

Мне удалось найти похожий вопрос, который помог мне понять, как это сделать.

Получите атрибуты, перечисленные на вкладке «Подробности» с помощью Powershell

Ответ на этот вопрос ссылается на блог разработчиков Microsoft, в котором автор ссылается на скрипт и объясняет, как его использовать для получения свойств из рекурсивного списка файлов.

Вывести список метаданных музыкального файла в CSV и открыть в Excel с помощью PowerShell

Конкретные шаги, которые я предпринял, были следующими:

  1. СкачалGet-FileMetaDataReturnObject.ps1сценарийиз галереи TechNet.
  2. В окне Powershell с правами администратора я дал себе разрешение на запуск неподписанных скриптов с помощью команды Set-ExecutionPolicy Unrestricted.
  3. Я загрузил скрипт в память с помощью команды C:\Users\<username>\Desktop\Get-FileMetaDataReturnObject.ps1.
  4. Я создал объект, содержащий все свойства метаданных для каждой папки и файла в папке со скриншотами, с помощью команды $fileMeta = Get-FileMetaData -folder (gci "C:\Program Files (x86)\Steam\userdata\<user_id>\760\remote" -Recurse -Directory).FullName.На моем компьютере это заняло три часа.
  5. Затем я экспортировал необходимые мне свойства с помощью команды $fileMeta | select Path, Kind, "Date taken" | Export-Csv -Path "C:\Users\<username>\Desktop\screenshots.csv" -Encoding ASCII -NoTypeInformation.
  6. В Notepad++ я отметил все строки, содержащие это слово thumbnails(чтобы игнорировать автоматически сгенерированные миниатюры подпапки, созданные Steam), Folder(чтобы игнорировать папки в целом) и ,"?(по какой-то причине Powershell, похоже, не смог правильно проанализировать даты и добавил вопросительный знак в начало каждой из них, но это помогло мне легко отфильтровать нулевые значения) и удалил их.
  7. Затем у меня остался список файлов, которые необходимо было скопировать в Google Фото.

Вероятно, было бы проще просто сохранить дату последней загрузки и использовать команду поиска Windows datecreated: d/m/yyyy .. d/m/yyyy(диапазон от даты последней загрузки до настоящего момента, используя австралийский формат), но любой из этих методов требует некоторой ловкости, чтобы отфильтровать ненужное, например, миниатюры, сохраняя при этом организацию (т. е. из какой игры сделан каждый снимок экрана).

Связанный контент