照片整理器[07-11-7]
最近相机里的照片比较多,一般是连拍了好几天之后,才把相机里的照片一股脑放到硬盘里,并且是隔上一两个星期才整理一次。日子一长,照片就多了起来,都分不清是什么时候拍的了。网上搜索了很久,找到一款名为PhotoTool的软件,可以按拍摄日期来整理照片,正合我意,只可惜,这个不到1M的小软件,居然要另外安装20余M的.NET 2.0,一气之下,用P写了一个类似功能的脚本,发出来大家玩玩。
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 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