使用文件名中的日期和时间信息删除某些图片

时间:2014-08-19 19:32:51

标签: image date batch-file filenames delete-file

我有一个包含552k张照片的文件夹。 (准确地说是552115)。

他们来自一台摄像机,他每天拍摄X张照片几年,后来我会用它来创造一个游戏中时光倒流。

问题在于,设置此功能的人将其配置为每24小时每两分钟拍摄一张照片。

现在我有一堆我需要删除的文件。

我每天09:00至15:00之间只需要1-5张照片,绝对不是晚上拍摄的照片。

文件名为Name-11-04-01_19-25-17-01.jpg

文件名为Name-YY-MM-DD_HH-MM-SS-MS.jpg

元数据中也提供了日期和时间信息。

我更希望是否可以在Batch或PowerShell中完成,但如果可以比使用batch / ps更容易,我可以使用其他脚本语言。

感谢您的回复! :)

2 个答案:

答案 0 :(得分:1)

以下应该可以解决问题。您必须调整"yourFolder"以指向包含这些文件的文件夹。它假设您的所有文件都有一个扩展名,但您未能在问题中显示该扩展名。

该脚本创建一个SAVE文件夹,然后尝试将每天4个文件移动到SAVE文件夹中。它会查找每天9,11,13和15小时的最早文件,其中分钟从0开始。

脚本运行后,如果需要,您可以确认已满足所需的所有剩余文件,并将文件保存在SAVE文件夹中。

@echo off
setlocal enableDelayedExpansion
pushd "yourFolder"
mkdir save
dir /b /a-d * | findstr /re "_09-0.-..-..\..* _11-0.-..-..\..* _13-0.-..-..\..* _15-0.-..-..\..*" >files.txt
for /f %%F in (files.txt) do (
  set "name=%%~nF"
  if not exist "save\!name:~0,-9!-*" move "%%F" save
)

您应该能够修改FINDSTR搜索模式以调整每天的文件数。例如,要每天保留一个文件,您可以使用单个字符串:"_09-0.-..-..\..*"。这样做的一个优点是在整个时间间隔内光线水平和方向应该更加一致。

答案 1 :(得分:0)

我建议Powershell使用批处理文件。我在这里写了解决方案作为powershell脚本 显然,在你珍贵的照片上运行它之前要彻底测试一下。

get-childitem -filter "*_*.jpg" | foreach ($_) {$hour = [int]$_.name.Substring($_.name.indexof("_")+1, 2); if($hour -lt 09 -or $hour -ge 15) {remove-item $_.fullname}}