中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [转发] 照片整理器[07-11-7] [namejm原创]
作者:
标题: [转发] 照片整理器[07-11-7] [namejm原创] 上一主题 | 下一主题
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『楼 主』:  [转发] 照片整理器[07-11-7] [namejm原创]

namejm原创,在这里好像没有看到,故转发过来,请namejm见谅照片整理器[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
  
更新历史:
2007.11.7
  对重名文件自动重命名,具体方式为在文件名后添加 -序号,例如:重命名
为 abc-1.jpg。此为1.1版。
2007.11.2
  修正了不处理子目录时只创建文件夹而不复制/移动文件的错误,感谢somebody
的测试。
2007.11.1
  美化了界面,修复了几处bug,增添了操作提示和移动照片后删除空文件夹的功能
2007.10.29
  1.0 初具雏形
[ Last edited by afeichai on 2007-11-7 at 03:38 PM ]

2007-11-7 15:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 2 楼』:  

貌似namejm就是这里的人.

2007-11-7 21:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

namejm原来是版主



2007-11-7 23:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: