标题: [文件操作] 批处理如何给数码相机里的照片、视频按日期分类存放 [打印本页]
作者: 小胖狐狸 时间: 2012-11-5 15:02 标题: 批处理如何给数码相机里的照片、视频按日期分类存放
本帖最后由 小胖狐狸 于 2012-11-5 15:13 编辑
相机驱动丢失导致自带软件无法使用,想通过读卡器+批处理的方式自动对相机SD卡中文件进行处理:
SD卡根目录下DCIM文件夹,该文件夹中会自动生成名为100RICOH的文件夹,该文件夹下存放的是不同日期拍摄的照片和视频,当达到一定数量时,相机会在DCIM下生成101ricoh文件夹继续存放
如下所示
DCIM
-100RICOH
-IMG001.JPG
-IMG002.JPG
......
-101RICOH
-IMG003.JPG
-AVI004.AVI
......
我想在SD卡根目录下放一个批处理,跟DCIM并列- @echo off
- :: 获取DCIM下的目录名
- dir .\DCIM\ /B /AD>C:\RICOH_dir.TXT
- for /f %%I in (c:\RICOH_dir.TXT) do (
- dir .\DCIM\%%I\ /N /A-D>C:\%%I.TXT
- :: 获取文件的修改日期后创建以日期为名的文件夹,并move文件到该文件夹中
- for /f "skip=5 tokens=1-3,6 delims=-/ " %%i in (c:\%%I.txt) do (
- if not exist .\DCIM\%%i%%j%%k md .\DCIM\%%i%%j%%k
- move .\DCIM\%%I\%%l .\DCIM\%%i%%j%%k\
- pause
- )
- )
复制代码
该批处理主要功能达到了,但是由于分析文本文件RICOH_dir.TXT时,最后两行文字会对for的新建文件夹产生影响,生成不需要的文件夹,不知如何可以让其不产生呢?
5 个文件 7,764,576 字节
0 个目录 494,206,976 可用字节- 驱动器 G 中的卷没有标签。
- 卷的序列号是 0EAE-DA68
-
- G:\DCIM\100RICOH 的目录
-
- 2012-09-01 21:13 290,568 R0013415.AVI
- 2012-08-25 09:18 1,952,653 R0013394.JPG
- 2012-09-01 16:40 1,875,363 R0013413.JPG
- 2012-09-22 08:55 1,841,520 R0013429.JPG
- 2012-10-17 21:44 1,804,472 R0013457.JPG
- 5 个文件 7,764,576 字节
- 0 个目录 494,206,976 可用字节
复制代码
for里用eol可以忽略特定字符开头的行,但是如果在for里用eol=,是不是得把这个参数写在""中的最后,那么 delims就没办法使用空格做分隔符了,学艺不精,很苦恼
作者: apang 时间: 2012-11-5 19:05
本帖最后由 apang 于 2012-11-5 19:09 编辑
其实,for变量%%~ta就是扩展到文件的修改时间。
揣摩了下楼主的意图,以下代码也许能满足要求:- @echo off
- pushd "DCIM\"
- for /f "delims=" %%b in ('dir /a-d /b /s') do (
- set "Name=%%b"
- set "T=%%~tb"
- setlocal enabledelayedexpansion
- set "T=!T:~,4!!T:~5,2!!T:~8,2!"
- if not exist "!T!\" md "!T!"
- move "!Name!" "!T!\"
- endlocal
- )
- pause
复制代码
作者: light.ming 时间: 2012-11-5 19:06
本帖最后由 light.ming 于 2012-11-5 20:55 编辑
- @echo off
- color 0a
- :: 获取DCIM下的目录名
- dir /B /AD>RICOH_dir.TXT
- for /f %%I in (RICOH_dir.TXT) do (
- for /f %%j in ('dir .\%%I\ /a-d /b /s ') do (
- echo %%~tj %%~nxj >>%%I.txt
- :: 获取文件的修改日期后创建以日期为名的文件夹,并move文件到该文件夹中
- for /f "tokens=1-3,5 delims=-/ " %%i in (%%I.txt) do (
- if not exist .\%%I\%%i%%j%%k md .\%%I\%%i%%j%%k
- if exist .\%%I\%%l move .\%%I\%%l .\%%I\%%i%%j%%k\
- )
- )
- if exist %%I.txt del /q %%I.txt
- )
- if exist RICOH_dir.TXT del /q RICOH_dir.TXT
- echo.
- echo 分类移动完成!按任意键退出。
- echo.
- pause>nul
复制代码
作者: wc726842270 时间: 2012-11-6 03:13
如果仅是修改的时间,可以考虑一下XCOPY /D
作者: 小胖狐狸 时间: 2012-11-6 09:11
本帖最后由 小胖狐狸 于 2012-11-6 09:22 编辑
回复 2# apang
代码简洁高效,感谢!等会要好好学习下你写的这段代码
batman 提示我使用%%~tb 这么个日期时间扩展参数,我用了后也考虑过截取日期
但是刚好我两台电脑的时间格式不相同,很容易看出差别:万一年份是两位数,那这种截取方法就可能导致文件夹名紊乱了
set "T=!T:~,4!!T:~5,2!!T:~8,2!"
作者: 小胖狐狸 时间: 2012-11-6 09:13
回复 3# light.ming
看了别人的方法,我的思路确实有些麻烦了,不过很感谢这位朋友按照我的思路,把我的问题解决,学习了!感谢 :)
作者: apang 时间: 2012-11-6 11:58
回复 5# 小胖狐狸 - @echo off
- pushd "DCIM\"
- for /f "delims=" %%a in ('dir /a-d /b /s') do (
- for /f "tokens=1-3 delims=-/. " %%b in ("%%~ta") do (
- if not exist "%%b%%c%%d\" md "%%b%%c%%d"
- move "%%a" "%%b%%c%%d\"
- )
- )
- pause
复制代码
试试
作者: ny350101 时间: 2012-11-7 23:36
本帖最后由 ny350101 于 2012-11-7 23:46 编辑
- @echo off
- echo ****************************************
- echo ***** 照片按日期分类 ********
- echo ****************************************
-
- dir /OD /X|find /I ".jpg" > filelist.txt
- dir /OD /X|find /I ".avi" >> filelist.txt
- dir /OD /X|find /I ".mov" >> filelist.txt
- echo 分类中,请稍等.............
- for /F "tokens=1-5" %%a in (filelist.txt) do md %%a 1>nul 2>nul & move %%d %%a
- del filelist.txt
- echo 分类成功结束 !
- pause
复制代码
批处理和照片放在一个文件夹里
http://www.bathome.net/thread-19994-1-1.html
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |