批處理制作照片整理器第2/2頁
更新時(shí)間:2008年09月16日 10:52:20 作者:
經(jīng)過將近1年時(shí)間的逐步完善,目前,此工具已經(jīng)具備了按照片exif信息中的拍攝時(shí)間或者像素大小整理照片的功能,并可以把照片的修改時(shí)間改為照片的拍攝時(shí)間,方便后續(xù)整理工作,強(qiáng)烈推薦使用。
復(fù)制代碼 代碼如下:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 作者: namejm
:: 出處: bbs.bathome.cn
:: 編寫日期: 2007-10-29~2008-9-3
:: 測(cè)試環(huán)境: CMD@WinXP SP2
:: 功能:按照exif信息歸類照片
:: 詳細(xì)介紹:
:: 本腳本通過獲取jpg照片的exif信息歸類圖片,具備按照分辨率大小和日期兩種
:: 方式歸類,并自動(dòng)重命名同名文件,同時(shí)統(tǒng)計(jì)已經(jīng)處理的照片數(shù)量。另外,可以選
:: 擇使用如下功能:
:: 1、批量修正當(dāng)前目錄下及所有子目錄中jpg照片的修改日期為拍攝日期;
:: 2、能把所有子目錄里的圖片移動(dòng)到父目錄下并刪除父目錄下的所有空目錄。
:: 注意:
:: 本腳本會(huì)讀取照片的exif信息,在按日期整理照片時(shí),自動(dòng)修正照片的修改時(shí)間
:: 為照片的拍攝時(shí)間,時(shí)間精確到秒;沒有exif信息的jpg圖片,修改時(shí)間保持不變。
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
mode con lines=30
set TT=照片整理器1.4
color 1f
:source
title %TT% 當(dāng)前目錄:"%cd%"
cls
echo ╭─────────╮
echo ╭────────┤選擇要整理的文件夾├─────────╮
echo │ ╰─────────╯ │
echo │ │
echo │ 本程序能把指定路徑下的jpg格式照片按照分辨率 │
echo │ │
echo │ 大小或者拍攝日期整理到如下格式的文件夾中: │
echo │ │
echo │ 1 分辨率大小 (如 800×600) │
echo │ │
echo │ 2 年-月-日(如 2007-01-01) │
echo │ │
echo │ 3 月\日期(如 01\2007-01-01) │
echo │ │
echo │ 4 年\日期(如 2007\2007-01-01) │
echo │ │
echo │ 5 年\月\日期 (如 2007\01\2007-01-01) │
echo │ │
echo │ 注意:本腳本在按照日期歸類照片時(shí),會(huì)自動(dòng)修正 │
echo │ │
echo │ 照片的創(chuàng)建時(shí)間為照片exif信息中的拍攝時(shí)間,精確到 │
echo │ │
echo │ 秒。沒有exif信息的jpg圖片,修改時(shí)間保持不變。 │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 處理當(dāng)前目錄請(qǐng)直接回車 退出請(qǐng)按 0
echo ──────────────────────────────
set Source=
set /p Source= 請(qǐng)把要處理的文件夾拖曳到本窗口:
if not defined Source set "Source=%cd%"
set "Source=%Source:"=%"
if "%Source%"=="0" exit
if not exist "%Source%\" goto source
echo "%Source%"|find ":">nul 2>nul||set "Source=%cd%\%Source%"
title %TT% 正在處理目錄:"%Source:"=%"
:fixtime
cls
echo ╭─────────╮
echo ╭────────┤修正照片的修改日期├─────────╮
echo │ ╰─────────╯ │
echo │ │
echo │ 照片的拍攝時(shí)間包含在exif信息中,反映在原始 │
echo │ │
echo │ 照片文件中,就是照片的修改時(shí)間。 │
echo │ │
echo │ 很不幸的是,照片的修改時(shí)間有時(shí)候并不是和exif │
echo │ │
echo │ 信息中的拍攝時(shí)間完全吻合,比如:照片被編輯后、數(shù) │
echo │ │
echo │ 據(jù)恢復(fù)后等等,從而導(dǎo)致在查看照片的修改時(shí)間時(shí),難 │
echo │ │
echo │ 以判定照片的拍攝時(shí)間,在一些需要按照拍攝時(shí)間把資 │
echo │ │
echo │ 料歸檔的場(chǎng)合,這樣的情形無疑是一種災(zāi)難。 │
echo │ │
echo │ 本功能可以把指定目錄及其所有子目錄下的照片修 │
echo │ │
echo │ 改時(shí)間重新設(shè)置為照片的拍攝時(shí)間——只要照片的exif │
echo │ │
echo │ 信息沒有被破壞掉。 │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步請(qǐng)按 1 退出請(qǐng)按 0
echo ──────────────────────────────
set FixTime=
set /p FixTime= 是否修正照片的修改時(shí)間為拍攝時(shí)間(是=Y 否=其他任意鍵):
if not defined FixTime goto movesub
set "FixTime=%FixTime:"=%"
if "%FixTime%"=="0" exit
if "%FixTime%"=="1" goto source
if /i "%FixTime%"=="y" (
jhead -ft "%Source%\*.jpg">nul 2>nul
for /f "delims=" %%i in ('dir /ad /b /s "%Source%" 2^>nul') do (
jhead -ft "%%i\*.jpg">nul 2>nul
title %TT% 正在處理目錄:"%%i"
)
)
:movesub
cls
echo.&echo.&echo.
echo ╭─────────╮
echo ╭────────┤ 預(yù)處理子目錄 ├─────────╮
echo │ ╰─────────╯ │
echo │ │
echo │ 如果當(dāng)前目錄的子目錄中存在照片,而你需要把 │
echo │ │
echo │ 它們都放到父目錄下,并刪除父目錄及其所有子目錄下 │
echo │ │
echo │ 的空文件夾,那么,這個(gè)功能將是非常有用的。 │
echo │ │
echo │ 注意:此處的空文件夾是指刪除父目錄及其所有子 │
echo │ │
echo │ 目錄下的Thumbs.db和*.ctg文件后形成的空文件夾,以 │
echo │ │
echo │ 及原本就存在的空文件夾。 │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步請(qǐng)按 1 退出請(qǐng)按 0
echo ──────────────────────────────
echo.
set MoveSub=
set /p MoveSub= 是否把照片移動(dòng)到父目錄下并刪除空目錄(是=Y 否=N):
if not defined MoveSub goto movesub
set "MoveSub=%MoveSub:"=%"
if not defined MoveSub goto 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 /s "%Source%\" 2^>nul') do (
for /f "delims=" %%j in ('dir /a-d /b /s "%%i\*.jpg" 2^>nul') do (
set route=&set postfix=
setlocal enabledelayedexpansion
call :re_name "%%j" "%Source%" "%%~nj"
move "%%j" "!Destination_1!">nul 2>nul
endlocal
set /a num+=1
)
title %TT% 正在處理文件:"%%i"
)
del /a /f /q /s "%Source%\Thumbs.db">nul 2>nul
del /a /f /q /s "%Source%\*.ctg">nul 2>nul
for /f "delims=" %%i in ('dir /ad /b /s "%Source%\"^|sort /r') do (
rd /q "%%i" 2>nul&title %TT% 處理文件:"%%i"
)
title %TT% 正在處理的目錄:"%Source%"
echo.&call echo 共處理了 %%num%% 張照片,按任意鍵繼續(xù)...
pause>nul
) else if /i not "%MoveSub%"=="n" goto movesub
:whethermove
cls
echo.
echo ╭─────────╮
echo ╭────────┤ 照片處理方式 ├─────────╮
echo │ ╰─────────╯ │
echo │ │
echo │ 如果不想刪除要處理文件夾下的照片,請(qǐng)選擇復(fù) │
echo │ │
echo │ 制功能;如果不保留原有的照片,請(qǐng)選擇移動(dòng)文件。 │
echo │ │
echo │ 注意:移動(dòng)文件后,將會(huì)刪除父目錄下的所有空文 │
echo │ │
echo │ 件夾。此處的空文件夾是指刪除父目錄及其所有子目錄 │
echo │ │
echo │ 下的Thumbs.db和*.ctg文件后形成的空文件夾,以及原 │
echo │ │
echo │ 本就存在的空文件夾。 │
echo │ │
echo │ 另:同名文件將作重命名處理,具體方式為:在文 │
echo │ │
echo │ 件名后添加 -序號(hào) 。比如重命名為 abc-1.jpg │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步請(qǐng)按 1 退出請(qǐng)按 0
echo ──────────────────────────────
echo.
set WhetherMove=
set /p WhetherMove= 移動(dòng)文件還是復(fù)制文件(移動(dòng)=M 復(fù)制=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
if /i "%MoveSub%"=="y" goto destination
:whethersub
echo.
set WhetherSub=
set /p WhetherSub= 是否處理子目錄(是=Y 否=N):
if not defined WhetherSub goto whethersub
set "WhetherSub=%WhetherSub:"=%"
if /i "%WhetherSub%"=="0" exit
if /i "%WhetherSub%"=="1" goto whethermove
if /i "%WhetherSub%"=="y" (
set WhetherSub=/s
goto destination
)
if /i "%WhetherSub%"=="n" (
set WhetherSub=
goto destination
)
goto whethersub
:destination
echo.
title %TT% 程序所在目錄:"%cd%"
set Destination=
set /p Destination= 請(qǐng)輸入保存路徑(保存在程序所在目錄下請(qǐng)直接回車):
if not defined Destination set "Destination=%cd%"
set "Destination=%Destination:"=%"
if "%Destination%"=="0" exit
if "%Destination%"=="1" goto whethermove
echo "%Destination%"|find ":">nul 2>nul||set "Destination=%cd%\%Destination%"
echo "%Destination%"|find /i "%Source%">nul 2>nul&&(
cls
for /l %%i in (1,1,7) do echo.
echo 為了不重復(fù)處理照片,不允許把保存路徑設(shè)置到源文件所在目錄下
echo.&echo 請(qǐng)重新設(shè)置保存路徑
echo.&echo.
goto destination
)
md "%Destination%" 2>nul
:wise
cls
echo.&echo.&echo.&echo.&echo.
echo ╭────────╮
echo ╭─────────┤ 選擇整理方式 ├─────────╮
echo │ ╰────────╯ │
echo │ │
echo │ 有兩種整理方式可供選擇: │
echo │ │
echo │ a 按文件尺寸整理 (如800×600) │
echo │ │
echo │ b 按照拍攝日期整理(如2008-01-01) │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步請(qǐng)按 1 退出請(qǐng)按 0
echo ──────────────────────────────
echo.
set Wise=
set /p Wise= 請(qǐng)選擇(a/b):
if not defined Wise goto wise
set "Wise=%Wise:"=%"
if not defined Wise goto wise
if "%Wise%"=="0" exit
if "%Wise%"=="1" goto whethermove
if /i "%Wise%"=="a" goto folders_dimesion
if /i "%Wise%"=="b" goto folders_date
goto wise
:folders_dimesion
cls
for /l %%i in (1,1,10) do echo.
echo 正在處理中,請(qǐng)稍候...
set num=0
call :dimesion "%Source%"
if defined WhetherSub (
for /f "delims=" %%i in ('dir /ad /b /s "%Source%" 2^>nul') do call :dimesion "%%i"
)
call :del_blank
pause>nul&goto source
:folders_date
cls
echo.&echo.&echo.
echo ╭─────────╮
echo ╭────────┤ 選擇目錄樹格式 ├─────────╮
echo │ ╰─────────╯ │
echo │ │
echo │ 在保存路徑下,將建立以照片拍攝日期為名的文 │
echo │ │
echo │ 件夾,這些文件夾的目錄樹結(jié)構(gòu)如下: │
echo │ │
echo │ a 年-月-日(如 2007-01-01) │
echo │ │
echo │ b 月\日期(如 01\2007-01-01) │
echo │ │
echo │ c 年\日期(如 2007\2007-01-01) │
echo │ │
echo │ d 年\月\日期 (如 2007\01\2007-01-01) │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步請(qǐng)按 1 退出請(qǐng)按 0
echo ──────────────────────────────
echo.
set FoldersTree=
set /p FoldersTree= 請(qǐng)選擇(a/b/c/d):
if not defined FoldersTree goto folders_date
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_date
cls
for /l %%i in (1,1,10) do echo.
echo 正在處理中,請(qǐng)稍候...
set num=0
for /f "delims=" %%i in ('dir /a-d /b %WhetherSub% "%Source%\*.jpg" 2^>nul') do (
set /a num+=1
jhead -ft "%%i">nul 2>nul
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%"=="b" set Y=
if /i "%FoldersTree%"=="c" set M=
md "%Destination%\!Y!\!M!\!str!" 2>nul
if /i "%WhetherMove%"=="M" (
call :re_name "%Source%\%%i" "%Destination%\!Y!\!M!\!str!" "%%~ni"
move "%%j" "!Destination_1!">nul 2>nul
) else (
call :re_name "%Source%\%%i" "%Destination%\!Y!\!M!\!str!" "%%~ni"
copy "%%j" "!Destination_1!">nul 2>nul
)
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%"=="b" set Y=
if /i "%FoldersTree%"=="c" set M=
md "%Destination%\!Y!\!M!\!str!" 2>nul
if /i "%WhetherMove%"=="M" (
call :re_name "%Source%\%%i" "%Destination%\!Y!\!M!\!str!" "%%~ni"
move "%%j" "!Destination_1!">nul 2>nul
) else (
call :re_name "%Source%\%%i" "%Destination%\!Y!\!M!\!str!" "%%~ni"
copy "%%j" "!Destination_1!">nul 2>nul
)
title %TT% 正在處理文件:"%Source%\%%~nxi"
endlocal
)
)
)
call :del_blank
pause>nul&goto source
:dimesion
:: 按照像素值在目的路徑下建立文件夾
for /f "tokens=2,3*" %%i in ('jhead -cs nul "%~1\*.jpg" 2^>nul^|findstr /i "name Resolution" 2^>nul') do (
if "%%j"==":" (
set "Source=%%k"&set "name=%%~nk"
title %TT% 正在處理文件:"%%k"
) else (
setlocal enabledelayedexpansion
set "dimesion=%%j%%k"
set "dimesion=!dimesion:x =×!"
set "Destination=%Destination%\!dimesion!"
md "!Destination!" 2>nul
set route=&set postfix=
if /i "%WhetherMove%"=="M" (
call :re_name "!Source!" "!Destination!" "!name!"
move "!Source!" "!Destination_1!">nul 2>nul
) else (
call :re_name "!Source!" "!Destination!" "!name!"
copy "!Source!" "!Destination_1!">nul 2>nul
)
endlocal
set /a num+=1
)
)
goto :eof
:re_name
if not defined route (
set "route=%~2"
set "filename=%~3"
)
:re_name_loop
if not exist "%route%\%filename%%postfix%.jpg" (
set "Destination_1=%route%\%filename%%postfix%.jpg"
set _num=0
goto :eof
) else (
set /a _num+=1
call set "postfix=-%%_num%%"
goto re_name_loop
)
goto :eof
:del_blank
if /i "%WhetherMove%"=="M" (
del /a /f /q /s "%Source%\Thumbs.db">nul 2>nul
del /a /f /q /s "%Source%\*.ctg">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
)
title %TT% 當(dāng)前目錄:"%cd%"
echo.&echo.&echo 共處理了 %num% 張照片,按任意鍵繼續(xù)...
goto :eof
相關(guān)軟件下載:http://www.dbjr.com.cn/softs/2148.html
相關(guān)文章
批處理FINDSTR正則表達(dá)式用法實(shí)例分析
dos或批處理下findstr正則用法,會(huì)了這個(gè)我們就可以用批處理實(shí)現(xiàn)文本等搜索替換等2008-08-08批處理入門手冊(cè)之批處理常用DOS命令篇(echo、rem、cd、dir)
這篇文章主要介紹了批處理入門手冊(cè)之批處理常用DOS命令篇,需要的朋友可以參考下2016-11-11使用winrar打包air程序?yàn)閑xe(包含air運(yùn)行環(huán)境)
這篇文章主要介紹了使用winrar打包air程序?yàn)閑xe(包含air運(yùn)行環(huán)境) .,需要的朋友可以參考下2014-10-10bat、vbs、js 原生混編(一個(gè)bat可以執(zhí)行vbs,js代碼)
發(fā)現(xiàn) mshta 會(huì)把 file:// 協(xié)議指向的文件當(dāng)作 html 來解析(注:IUnknown 與 happyxxdhaha 提醒此處必需使用絕對(duì)路徑,否則不會(huì)執(zhí)行),心里頓時(shí)有一萬只草泥馬奔過,原來如此簡(jiǎn)單的答案就在身邊,卻錯(cuò)過了四年2016-01-01關(guān)閉所有分區(qū)自動(dòng)播放和恢復(fù)所有分區(qū)自動(dòng)播放的cmd批處理
關(guān)閉所有分區(qū)自動(dòng)播放和恢復(fù)所有分區(qū)自動(dòng)播放.cmd批處理,需要的朋友可以參考下2012-07-07