联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Code by namejm 2007-10-29~11-7 CMD@XP :: 功能:按照拍摄日期归类照片 :: 详细介绍: :: 本脚本按照jpg图片的修改日期归类图片,具备 年-月-日、年\月\日期 和 :: 年\日期 三种归类方式,并能把所有子目录里的图片移动到父目录下且删除父 :: 目录下的所有空目录,能统计处理的图片数量。 :: 注意: :: 当照片导入电脑后,如果进行了除重命名外的其他操作,则很可能导致修改 :: 日期不等于照片的拍摄日期,因此,强烈建议从相机中把照片导出后立即运行本 :: 程序,否则,极容易导致归类错误。 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @echo off mode con lines=30 set TT=照片整理器 1.1 color 1f :source title %TT% 当前目录:"%cd%" cls echo. echo ╭─────────╮ echo ╭────────┤选择要整理的文件夹├─────────╮ echo │ ╰─────────╯ │ echo │ │ echo │ 本程序能把指定文件夹下的jpg格式照片按照拍摄 │ echo │ │ echo │ 日期整理到不同的文件夹下,整理后的文件夹名具有如 │ echo │ │ echo │ 下格式: │ echo │ │ echo │ 1 年-月-日(如 2007-01-01) │ echo │ │ echo │ 2 年\月\日期(如 2007\01\2007-01-01) │ echo │ │ echo │ 3 年\日期 (如 2007\2007-01-01) │ echo │ │ echo │ 注意:由于本脚本实际上是按照照片创建日期来整 │ echo │ │ echo │ 理,所以,把照片导入电脑后,请勿作任何编辑操作。 │ echo │ │ echo │ 另:重命名照片不会修改照片的创建日期。 │ echo │ │ echo ╰────────────────────────────╯ echo. echo 处理当前目录请直接回车 退出请按 0 echo ────────────────────────────── set Source= set /p Source= 请把要处理的文件夹拖曳到本窗口: if defined Source ( set "Source=%Source:"=%" title %TT% 处理目录:"%Source:"=%" ) else title %TT% 处理目录:"%cd%" if "%Source%"=="0" exit if not exist "%source%.\" goto source :movesub cls echo.&echo.&echo. echo ╭─────────╮ echo ╭────────┤ 预处理子目录 ├─────────╮ echo │ ╰─────────╯ │ echo │ │ echo │ 如果当前目录的子目录中存在照片,而你需要把 │ echo │ │ echo │ 它们都放到父目录下,并删除父目录及其所有子目录下 │ echo │ │ echo │ 的空文件夹,那么,这个功能将是非常有用的。 │ echo │ │ echo │ 注意:此处的空文件夹是指删除父目录及其所有子 │ echo │ │ echo │ 目录下的Thumbs.db后形成的空文件夹,以及原本就存在 │ echo │ │ echo │ 的空文件夹。 │ echo │ │ echo ╰────────────────────────────╯ echo. echo 返回上一步请按 1 退出请按 0 echo ────────────────────────────── echo. set MoveSub= set /p MoveSub= 是否把所有照片都移动到父目录下并删除空目录(y/n): if not defined MoveSub goto movesub set "MoveSub=%MoveSub:"=%" if "%MoveSub%"=="0" exit if "%MoveSub%"=="1" goto source if /i "%MoveSub%"=="y" ( set num=0 set WhetherMove=M for /f "delims=" %%i in ('dir /ad /b "%Source%.\" 2^>nul') do ( for /f "delims=" %%j in ('dir /a-d /b /s "%%i\*.jpg" 2^>nul') do ( set route=&set postfix= if not exist "%Source%.\%%~nxi" ( move "%%j" "%Source%"&& set /a num+=1 ) else ( set _num=0 call :re_name "%%j" "%Source%" "%%~nj"&&set /a num+=1 ) ) title %TT% "%%i" ) del /a /f /q /s "%Source%.\Thumbs.db">nul 2>nul if defined Source ( for /f "delims=" %%i in ('dir /ad /b /s "%Source%.\"^|sort /r') do (rd /q "%%i" 2>nul&title %TT% "%%i") ) else for /f "delims=" %%i in ('dir /ad /b /s^|sort /r') do (rd /q "%%i" 2>nul&title %TT% "%%i") title %TT% "%cd%" echo.&call echo 共处理了 %%num%% 张照片,按任意键继续... pause>nul ) else if /i not "%MoveSub%"=="n" goto movesub :whethermove cls echo.&echo. echo ╭─────────╮ echo ╭────────┤ 照片处理方式 ├─────────╮ echo │ ╰─────────╯ │ echo │ │ echo │ 如果不想删除要处理文件夹下的照片,请选择复 │ echo │ │ echo │ 制功能;如果不保留原有的照片,请选择移动文件。 │ echo │ │ echo │ 注意:移动文件后,将会删除父目录下的所有空文 │ echo │ │ echo │ 件夹。此处的空文件夹是指删除父目录及其所有子目录 │ echo │ │ echo │ 下的Thumbs.db后形成的空文件夹,以及原本就存在的 │ echo │ │ echo │ 空文件夹。 │ echo │ │ echo │ 另:同名文件将作重命名处理,具体方式为:在文 │ echo │ │ echo │ 件名后添加 -序号 。比如重命名为 abc-1.jpg │ echo │ │ echo ╰────────────────────────────╯ echo. echo 返回上一步请按 1 退出请按 0 echo ────────────────────────────── echo. set WhetherMove= set /p WhetherMove= 移动文件还是复制文件(M 移动 C 复制): if not defined WhetherMove goto whethermove set "WhetherMove=%WhetherMove:"=%" if "%WhetherMove%"=="0" exit if "%WhetherMove%"=="1" goto movesub set flag= if /i "%WhetherMove%"=="M" set flag=1 if /i "%WhetherMove%"=="C" set flag=1 if not defined flag goto whethermove :whethersub echo. set WhetherSub= set /p WhetherSub= 是否处理子目录(y/n): if not defined WhetherSub goto whethersub set "WhetherSub=%WhetherSub:"=%" if /i "%WhetherSub%"=="y" (set WhetherSub=/s) else set WhetherSub= :destination echo. set Destination= set /p Destination= 请输入保存路径(保存在程序所在目录下请直接回车): if defined Destination set "Destination=%Destination:"=%" md "%Destination%" 2>nul :folders cls echo.&echo.&echo. echo ╭─────────╮ echo ╭────────┤ 选择目录树格式 ├─────────╮ echo │ ╰─────────╯ │ echo │ │ echo │ 在保存路径下,将建立以照片拍摄日期为名的文 │ echo │ │ echo │ 件夹,这些文件夹的目录树结构如下: │ echo │ │ echo │ a 年-月-日(如 2007-01-01) │ echo │ │ echo │ b 年\月\日期(如 2007\01\2007-01-01) │ echo │ │ echo │ c 年\日期 (如 2007\2007-01-01) │ echo │ │ echo ╰────────────────────────────╯ echo. echo 返回上一步请按 1 退出请按 0 echo ────────────────────────────── echo. set FoldersTree= set /p FoldersTree= 请选择(a/b/c): if not defined FoldersTree goto folders set "FoldersTree=%FoldersTree:"=%" if "%FoldersTree%"=="0" exit if "%FoldersTree%"=="1" goto whethermove set choice= for %%i in (a b c) do if /i "%FoldersTree%"=="%%i" set choice=1 if not defined choice goto folders echo.&echo 正在处理中,请稍候... set num=0 for /f "delims=" %%i in ('dir /a-d /b %WhetherSub% "%Source%.\*.jpg" 2^>nul') do ( set /a num+=1 if defined WhetherSub ( for /f "delims=" %%j in ("%%i") do ( set str=%%~tj set route=&set postfix= setlocal enabledelayedexpansion set str=!str:~0,10! set Y=!str:~0,4!&set M=!str:~5,2!&set D=!str:~8,2! if /i "%FoldersTree%"=="a" set Y=&set M= if /i "%FoldersTree%"=="c" set M= md "%Destination%.\!Y!\!M!\!str!" 2>nul if /i "%WhetherMove%"=="M" ( if not exist "%Destination%.\!Y!\!M!\!str!\%%~nxi" ( move "%%i" "%Destination%.\!Y!\!M!\!str!" 2>nul ) else ( call :re_name "%%i" "%Destination%.\!Y!\!M!\!str!" "%%~ni" ) ) else ( if not exist "%Destination%.\!Y!\!M!\!str!\%%~nxi" ( copy "%%i" "%Destination%.\!Y!\!M!\!str!">nul 2>nul ) else ( call :re_name "%%i" "%Destination%.\!Y!\!M!\!str!" "%%~ni" ) ) title %TT% "%%i" endlocal ) ) else ( for /f "delims=" %%j in ("%Source%.\%%i") do ( set str=%%~tj set route=&set postfix= setlocal enabledelayedexpansion set str=!str:~0,10! set Y=!str:~0,4!&set M=!str:~5,2!&set D=!str:~8,2! if /i "%FoldersTree%"=="a" set Y=&set M= if /i "%FoldersTree%"=="c" set M= md "%Destination%.\!Y!\!M!\!str!" 2>nul if /i "%WhetherMove%"=="M" ( if not exist "%Destination%.\!Y!\!M!\!str!\%%i" ( move "%Source%.\%%i" "%Destination%.\!Y!\!M!\!str!" 2>nul ) else ( call :re_name "%Source%.\%%i" "%Destination%.\!Y!\!M!\!str!" "%%~ni" ) ) else ( if not exist "%Destination%.\!Y!\!M!\!str!\%%i" ( copy "%Source%.\%%i" "%Destination%.\!Y!\!M!\!str!">nul 2>nul ) else ( call :re_name "%Source%.\%%i" "%Destination%.\!Y!\!M!\!str!" "%%~ni" ) ) title %TT% "%Source%.\%%~nxi" endlocal ) ) ) title %TT% 当前目录:"%cd%" if /i "%WhetherMove%"=="M" ( del /a /f /q /s "%Source%.\Thumbs.db">nul 2>nul for /f "delims=" %%i in ('dir /ad /b /s "%Source%.\"^|sort /r') do (rd /q "%%i" 2>nul) rd /q "%Source%" 2>nul ) echo.&echo 共处理了 %num% 张照片,按任意键继续... pause>nul&goto source :re_name if not defined route ( set "route=%~2" set "filename=%~3" ) if not exist "%route%.\%filename%%postfix%.jpg" ( if /i "%WhetherMove%"=="M" ( move "%~1" "%route%.\%filename%%postfix%.jpg" 2>nul ) else copy "%~1" "%route%.\%filename%%postfix%.jpg">nul 2>nul ) else ( set /a _num+=1 call set "postfix=-%%_num%%" goto re_name ) goto :eof
更新历史: 2007.11.7 对重名文件自动重命名,具体方式为在文件名后添加 -序号,例如:重命名 为 abc-1.jpg。此为1.1版。 2007.11.2 修正了不处理子目录时只创建文件夹而不复制/移动文件的错误,感谢somebody 的测试。 2007.11.1 美化了界面,修复了几处bug,增添了操作提示和移动照片后删除空文件夹的功能 2007.10.29 1.0 初具雏形