我的jpg文件名为EXIF日期。文件名的格式为YYYY-MM-DD-HH-MM-SS.JPG。这样它始终保持顺序。现在我的相机设置到错误的时间。那么如何将HH更改为-1小时而不是实际。
例如,如果文件名为“2010-11-26-19-15-17_C.jpg”,我想将其更改为“2010-11-26- 18 -15- 17_C.jpg”。我有数百个文件,它们都需要更改为文件名中的实际文件前一小时。
也许是批处理脚本?我使用过Renamer软件,但我无法让它正常工作。
答案 0 :(得分:3)
请注意,在最糟糕的情况下,您可能不仅需要更改小时,还需要更改日期,月份和年份(2010-01-01-00-10-10.jpg
例如必须变为1999-12-31-23-10-10.jpg
)
如果你忽略了这个警告,这里的批处理文件只允许你减少名字的小时部分。
@echo off
setlocal
for /f "usebackq delims=|" %%f in (`dir /b *.jpg`) do call :ProcessFile %%f
goto :End
:ProcessFile
for /f "tokens=1,2,3,4,*delims=-" %%i in ("%1") do call :ParseName %1 %%i %%j %%k %%l %%m
goto :End
:ParseName
set /A NEW_HOUR=%5-1
if "%NEW_HOUR%" == "9" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "8" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "7" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "6" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "5" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "4" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "3" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "2" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "1" set NEW_HOUR=0%NEW_HOUR%
if "%NEW_HOUR%" == "0" set NEW_HOUR=0%NEW_HOUR%
set OLD_NAME=%1
set NEW_NAME=%2-%3-%4-%NEW_HOUR%-%6
echo Old name : %OLD_NAME%
echo New name : %NEW_NAME%
rem Do copy, rename or whatever you want to do
goto :End
:End
endlocal
答案 1 :(得分:1)
请注意,编辑文件名不会影响存储在JPG文件中的EXIF数据,该文件包含相同的错误时间戳。
一般来说,解决此问题的一个好方法是使用可以修改EXIF数据的工具,以及重命名要匹配的文件。其中一个工具是Phil Harvey的Exiftool。它是免费的,开源的,可移植到许多平台上。它甚至支持Windows。
从其网站引用:
在拍摄一堆照片之前,您是否忘记在数码相机上设置日期/时间? ExifTool具有时移功能,可以轻松地将批量修复应用于图像的时间戳(即更改Windows资源管理器报告的“拍摄日期图片”)。例如,当您在2005:11:03 10:48:00放入新电池时,您的相机时钟被重置为2000:01:01 00:00:00。然后您拍摄的所有照片的时间戳都会错误地显示5年,10个月,2天,10小时和48分钟。要解决此问题,请将所有图像放在同一目录(“DIR”)中并运行exiftool:
exiftool "-DateTimeOriginal+=5:10:2 10:48:0" DIR
上面的示例仅更改DateTimeOriginal标记,但可以移动任何可写日期或时间标记,并且可以使用单个命令行写入多个标记。通常,在JPEG图像中,必须更改DateTimeOriginal,CreateDate和ModifyDate值。为方便起见,已定义一个名为AllDates的快捷方式标记来表示这三个标记。因此,例如,如果您忘记在秋季夏令时结束时将相机时钟设置为1小时,则可以使用以下方法修复图像:
exiftool -AllDates-=1 DIR
它还支持基于文件名模板重命名文件,该模板不仅可以更改名称,还可以将文件分发到树中。有一个完整的示例at the site,但简单的情况看起来像这样
exiftool "-FileName<CreateDate" -d "%Y-%m-%d-%H-%M-%S.%%e" DIR
重命名名为DIR
的目录中的每个文件以匹配您请求的模板。