编写批处理文件,使得照片以"照片拍照日期"这一属性来重命名

比如照片拍照时间为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-#”
谢谢各位高手,大神!!
展开
 我来答
jd08139
2013-08-02 · TA获得超过3733个赞
知道大有可为答主
回答量:2174
采纳率:66%
帮助的人:2824万
展开全部
@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
我现在是通过视频编辑软件,导入所有音频来看持续时间之和。
你那里有没有直接用批处理文件来解决这一问题的方法呀?
追答
暂时没有
yyykkkyyyy
2013-08-02 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3268万
展开全部

我可以用文件创建时间来更名,但不是以拍照时间(按说按修改时间也行,还稍省点事,精确到秒就没必要了普通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开头识别的,现在没必要了把这行去掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈哥深惠通勤
2013-08-02 · TA获得超过1175个赞
知道小有建树答主
回答量:1909
采纳率:33%
帮助的人:826万
展开全部
@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
)
追问
谢谢大神!
不过有些问题:你的这个程序是以“修改时间”重命名的,而不是我要求的以"照片拍照日期"重命名。
另外,你的程序不知道为什么,只能执行4个,如果我有上百个,上千个,只能执行4个,这个应该可以改进下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式