编写批处理文件,使得照片以"照片拍照日期"这一属性来重命名
比如照片拍照时间为2012-2-23:00有两个文件,2013-1-12:00的有2个文件,2013-1-12:01有2个文件的话,这6个文件批处理后的文件名为:2012...
比如照片拍照时间为2012-2-2 3:00有两个文件,2013-1-1 2:00的有2个文件,2013-1-1 2:01有2个文件的话,这6个文件批处理后的文件名为:
20120202-0300-1
20120202-0300-2
20130101-0200-1
20130101-0200-2
20130101-0201-1
20130101-0201-2
也就是说,重命名为“YYYYMMDD-hhmm-#”这种格式。
另外,如果可以精确到秒的话,就将其重命名为“YYYYMMDD-hhmmss”这种格式。如果有多文件拍照时间为同一秒(这种情况及其少见,但要预防),请从第二个文件其设置格式为“YYYYMMDD-hhmmss-#”
谢谢各位高手,大神!! 展开
20120202-0300-1
20120202-0300-2
20130101-0200-1
20130101-0200-2
20130101-0201-1
20130101-0201-2
也就是说,重命名为“YYYYMMDD-hhmm-#”这种格式。
另外,如果可以精确到秒的话,就将其重命名为“YYYYMMDD-hhmmss”这种格式。如果有多文件拍照时间为同一秒(这种情况及其少见,但要预防),请从第二个文件其设置格式为“YYYYMMDD-hhmmss-#”
谢谢各位高手,大神!! 展开
3个回答
展开全部
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%i in ('dir /a-d /b %~dp0*.jpg') do (
FOR /f "tokens=1-6 delims=: " %%a in ('exiftool -p $DateTimeOriginal "%%i"') do (
SET dt=%%a%%b%%c-%%d%%e%%%f
IF not EXIST %%~dpi!dt!-!n!%%~xi (SET /a n=1&REN "%%i" !dt!-!n!%%~xi) else (SET /a n+=1&REN "%%i" !dt!-!n!%%~xi)))
PAUSE
拍摄时间需要读exif,需要要使用第三方工具.其实早就写好了.没发而已.我说老兄你提的问题都很.......
注意:复制粘贴时请把记事本的自动换行选项关掉.以防止粘贴时出现格式问题.
更多追问追答
追问
老兄,你太牛了!!!十分感谢!!!
很好很强大!
我就是自己有需要,也觉得或许应该能实现就问了,也没有想太多。
我还有一个问题,关于所有音频文件的持续时间之和
地址:http://zhidao.baidu.com/question/576166152.html?quesup2&oldq=1
我现在是通过视频编辑软件,导入所有音频来看持续时间之和。
你那里有没有直接用批处理文件来解决这一问题的方法呀?
追答
暂时没有
展开全部
我可以用文件创建时间来更名,但不是以拍照时间(按说按修改时间也行,还稍省点事,精确到秒就没必要了普通CMD命令时间只精确到分,引入别的命令如果文件较多将很费时)
@echo off
::假定后缀名为jpg
set x=*.jpg
ren 20*%x% $$*%x% 2>nul
for /f "tokens=1-3*" %%a in ('dir/a-d/od/tc %x%^|findstr/b "20[0-1][0-9]"')do (
set "t=%%a %%b"
setlocal enabledelayedexpansion
set "t=!t:-=!"
set "t=!t::=!"
set "t=!t: =-!"
rem 下一行30表明同一分钟最多30个文件--可以更改,超过的文件将忽略
for /L %%e in (1,1,30)do if not defined f (
if not exist "!t!-%%e%%~xd" (
ren "%%d" "!t!-%%e%%~xd"
set f=y
echo %%d =^> !t!-%%e
))
endlocal
)
pause
更多追问追答
追问
谢谢你的回答
不过,我发现创建日期是我将照片拷到电脑里的日期,修改日期是我修改时的日期,如果从没修改过时拍照日期。我现在的照片都已经复制到电脑里面,很多已经进行了修改。
所以你看能否想办法提取下拍照时间,并予以重命名呀?
另外,如果我不想在名字中加入年份信息的话,如重命名为“MMDD-hhmm-#”,应该如何修改你的程序呀?
追答
bat没办法取得“拍照时间”,不然只能用最后修改时间了,如果就我原代码修改的话把
'dir/a-d/od/tc 中的/tc改成/tw 对于去掉年份的4位,在
set "t=!t::=!"
set "t=!t: =-!"
之下插入一行
set "t=!t:~4!"
另外有一句ren 20*%x% $$*%x% 2>nul是防止你原文件名已改乱了加上的,我是以20开头识别的,现在没必要了把这行去掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir/b') do (
set n=1
set file=%%i
set ext=%%~xi
set name=%%~ti
set name=!name:-=!
set name=!name::=!
set name=!name: =-!
:loop
if exist !name!-!n!!ext! set/a n+=1&&call :loop
ren "!file!" !name!-!n!!ext! 2>nul
)
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir/b') do (
set n=1
set file=%%i
set ext=%%~xi
set name=%%~ti
set name=!name:-=!
set name=!name::=!
set name=!name: =-!
:loop
if exist !name!-!n!!ext! set/a n+=1&&call :loop
ren "!file!" !name!-!n!!ext! 2>nul
)
追问
谢谢大神!
不过有些问题:你的这个程序是以“修改时间”重命名的,而不是我要求的以"照片拍照日期"重命名。
另外,你的程序不知道为什么,只能执行4个,如果我有上百个,上千个,只能执行4个,这个应该可以改进下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询