我很抱歉我的愚蠢问题,但我正在努力编写我想要的代码。我正在使用博客文章中的代码:Dewey Dunnington的鱼和哨子(http://apps.fishandwhistle.net/archives/956)。
我正在尝试编写一个循环,我可以使用文件夹名称和EXIF数据中的“CreateDate”日期时间重命名所有文件夹中的所有图像(递归)。图像存储在相机站(例如“A”站)文件夹中,然后存储在相机文件夹中(工作站上的2个相机,例如相机“1”)。
因此单个图像目录将是: H:。/ GitHub的/ CT_Mara /图像/ raw_images / A / 1 / .... .... JPG JPG .... JPG ....等
因此,理想情况下,我希望将我的图像重命名为“A1_2017-05-03 15-45-13.jpg”,如果有两张或更多具有相同名称的照片,则应将其命名为:“A1_2017-05- 03 15-45-13(1).jpg“和”A1_2017-05-03 15-45-13(2).jpg“
这是我正在使用的代码:
library(lubridate)
exifRip <- function(filename) {
command <- paste("exiftool -n -csv",
paste(shQuote(filename), collapse=" "))
read.csv(textConnection(system(command, intern=TRUE)),
header = TRUE,
sep = ",",
quote = "",
stringsAsFactors = FALSE)
}
exifdata <- exifRip(list.files(path="H:/GitHub/CT_Mara/images/raw_images"))
View(exifdata)
outdir <- dir.create("H:/GitHub/CT_Mara/images/raw_images/EXIFdata")
for(i in 1:nrow(exifdata)) {
row <- exifdata[i, ]
d <- ymd_hms(row$CreateDate)
ext <- tools::file_ext(row$SourceFile) #maintain file extension
newname <- file.path(outdir,
sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s",
year(d), month(d), day(d), hour(d), minute(d),
second(d), ext))
file.copy(row$SourceFile, newname)
}
Error in sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s", year(d), month(d), :
invalid format '%04d'; use format %f, %e, %g or %a for numeric objects
In addition: Warning message:
All formats failed to parse. No formats found.
任何关于如何清理它的建议都将受到高度赞赏..提前致谢。
亲切的问候, 菲利普
答案 0 :(得分:0)
以下exiftool命令几乎可以为您提供所需内容而无需编写脚本。唯一的区别是重复的文件将被命名为“NAME_1”,“NAME_2”而不是“NAME(1)”,“NAME(2)”:
exiftool '-filename<%-1:1D%-1:D_${createdate}%+c.%e' -d "%Y-%m-%d %H-%M-%S" -r DIR
其中DIR是包含图像的目录的名称。如果您在Windows中,则应在第一个参数周围使用双引号而不是单引号。
在此命令中将“filename”替换为“testname”以进行干运行测试,以查看在实际重命名之前文件名是什么。