在我的 Windows 10 主计算机上,我使用 Steam 截取了大量视频游戏截图。在 Steam 的截图文件夹 ( Steam\userdata\<user_id>\760\remote
) 中,它会为每个游戏创建一个新文件夹,该文件夹本身包含一个screenshots
文件夹,其中包含您截取的截图。
我曾经将这些截图备份到 Google Photos。为了让截图能够以正确的日期上传,我使用 exiftool 设置了当时存在的所有图像文件的“拍摄日期”属性。
上传后我没有删除这些文件,因为我仍然希望 Steam 能够识别它们。
从那时起,我截取了更多的截图,并想上传这些新的截图,而不需要重新上传已经上传的截图(谷歌会将它们识别为重复的,但 165 个文件夹和数万张图片仍然浪费我的带宽和时间)。
我能想到的新截图和之前上传的截图之间的唯一区别是,新截图缺少“拍摄日期”属性。我手头没有上次上传的日期,虽然我可以从 Google Photos 中获取该日期,但我宁愿不这样做。
有没有办法递归搜索顶层文件夹以查找缺少特定属性的文件?
答案1
我找到了一个类似的问题来帮助我弄清楚如何去做。
使用 Powershell 获取“详细信息”选项卡中列出的属性
该问题的答案链接到 Microsoft Dev Blog,其中作者链接了一个脚本并解释了如何使用它从递归文件列表中获取属性。
在 CSV 中列出音乐文件元数据并使用 PowerShell 在 Excel 中打开
我采取的具体步骤如下:
- 下载了获取文件元数据返回对象.ps1脚本来自 TechNet 库。
- 在具有管理员权限的 Powershell 窗口中,我授予自己使用命令运行未签名的脚本的权限
Set-ExecutionPolicy Unrestricted
。 - 我使用命令将脚本加载到内存中
C:\Users\<username>\Desktop\Get-FileMetaDataReturnObject.ps1
。 - 我使用命令创建了一个对象,该对象包含屏幕截图文件夹中每个文件夹和文件的所有元数据属性
$fileMeta = Get-FileMetaData -folder (gci "C:\Program Files (x86)\Steam\userdata\<user_id>\760\remote" -Recurse -Directory).FullName
。这在我的计算机上花了三个小时才完成。 - 然后我使用命令导出我需要的特定属性
$fileMeta | select Path, Kind, "Date taken" | Export-Csv -Path "C:\Users\<username>\Desktop\screenshots.csv" -Encoding ASCII -NoTypeInformation
。 - 在 Notepad++ 中,我标记了所有包含该单词的行
thumbnails
(忽略 Steam 创建的自动生成的缩略图子文件夹)、Folder
(通常忽略文件夹)和,"?
(由于某种原因,Powershell 似乎无法正确解析日期并在每个日期的开头附加了一个问号,但这帮助我轻松过滤掉空值)并删除了它们。 - 然后我得到了一份需要备份到 Google Photos 的文件列表。
保留最后上传日期并使用 Windows 搜索命令datecreated: d/m/yyyy .. d/m/yyyy
(使用澳大利亚格式,范围是最后上传日期和现在之间)可能会更容易,但无论哪种方法都需要一点调整来过滤掉你不需要的东西,比如缩略图,同时保留组织(即每个截图来自哪个游戏)。