Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- rem Froz 14.02.2016
- set ex="%~dp0bin\exiv2.exe"
- if not exist %ex% echo Для работы скрипта необходим %ex% и libexpat.dll & pause & goto e
- set extag=Exif.Photo.DateTimeOriginal
- if -%1==- goto hlp
- title Переименование файлов в формат "ГГГГ-ММ-ДД_имя.ext"...
- set counter=0
- set dtoall=0
- set nodto=0
- echo.
- :getfile
- if -%1==- goto e
- set atr=%~a1
- set datr=%atr:~0,1%
- if /I "%datr%"=="d" goto folder
- call :work %1
- goto shft
- :folder
- echo.
- echo Обрабатываем папку "%~n1" с подпапками:
- echo ----------------------------------------------------------------
- for /r %1 %%i in (*) do call :work "%%i"
- goto shft
- :shft
- shift /1
- goto getfile
- :work
- set fskip=0
- set dto=
- set ymd=
- if -%~x1==- echo "%~nx1" - без расширения, пропускаем. & exit/b
- if not exist %1 echo "%~nx1" отсутствует, пропускаем. & exit/b
- if /i %~x1==.jpg (call :jpgchk %1) else call :extractfmd %1
- if %fskip%==1 echo Дата не введена, "%~nx1" пропущен. & exit/b
- rem Check if rename done before and YYYYMMDD_ (Samsung phone) name
- for %%n in (%1) do set nm=%%~nn
- set ynm=%nm:~0,4%
- set mnm=%nm:~5,2%
- set dnm=%nm:~8,2%
- set solidmm=%nm:~4,2%
- set soliddd=%nm:~6,2%
- for %%x in (%1) do set nx=%%~nxx
- set sldnmtail=%nx:~8%
- set nameymd=%ynm%-%mnm%-%dnm%
- set sldnmymd=%ynm%-%solidmm%-%soliddd%
- if "%ymd%"=="%nameymd%" echo "%~nx1" обработан ранее, пропускаем.& exit/b
- if "%ymd%"=="%sldnmymd%" (
- ren %1 "%sldnmymd%%sldnmtail%"
- set/a counter=%counter%+1
- echo "%~nx1" -^> "%sldnmymd%%sldnmtail%"
- exit/b
- )
- ren %1 "%ymd%_%~nx1"
- set/a counter=%counter%+1
- echo "%~nx1" -^> "%ymd%_%~nx1"
- exit/b
- :extractfmd
- rem Extract FileModifyDate
- for %%f in (%1) do set dt=%%~tf
- set d=%dt:~0,2%
- set m=%dt:~3,2%
- set y=%dt:~6,4%
- set ymd=%y%-%m%-%d%
- exit/b
- :jpgchk
- rem Check if file contains ')' and temporary rename them to '_'
- set fn=%~nx1
- set tmpn=$tmp$%fn:)=_%
- if "%tmpn%"=="$tmp$%~nx1" (call :grepdto %1) else (
- rem Rename source file name to tempname
- ren %1 "%tmpn%"
- call :grepdto "%tmpn%"
- ren "%~dp1%tmpn%" "%~nx1%"
- )
- rem If DateTimeOriginal tag not found
- if %nodto%==1 call :grepdlm %1
- exit/b
- :grepdto
- rem Extract JPEG DateTimeOriginal EXIF tag:
- pushd "%~dp1"
- for /f "tokens=1" %%e in ('"%ex% -q -g %extag% -Pv %1"') do set dto=%%e
- popd
- if -%dto%==- (set nodto=1) else call :grepdtosets
- exit/b
- :grepdtosets
- set y=%dto:~0,4%
- set m=%dto:~5,2%
- set d=%dto:~8,2%
- set ymd=%y%-%m%-%d%
- exit/b
- :grepdlm
- rem Extract DateLastModified system tag
- set tv="%temp%\$%~n1$.vbs"
- set tv2="%temp%\$%~n1$.txt"
- echo Wscript.Echo CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments.Item(0)).DateLastModified>%tv%
- pushd "%~dp1"
- for /f "delims=" %%t in ('"cscript //nologo %tv% "%~nx1""') do set dt=%%t
- popd
- del %tv%
- echo %dt%>%tv2%
- for %%a in (%tv2%) do set dlmsize=%%~za
- del %tv2%
- rem Check if file creation time is 'before 10 hours (one-digit hour)':
- if %dlmsize%==20 (call :earlybird) else call :dlmsets
- set fdto=%y%-%m%-%d% %hh%:%mm%:%ss%
- if %dtoall%==0 (call :inputdto) else set dto=%fdto%
- if %fskip%==1 exit/b
- %ex% -k -M"add %extag% %dto%" %1
- echo Тег %extag%=%dto% добавлен.
- set nodto=0
- call :grepdtosets
- exit/b
- :earlybird
- rem If file creation time is 'before 10 hours':
- set d=%dt:~0,2%
- set m=%dt:~3,2%
- set y=%dt:~6,4%
- set hhe=%dt:~11,1%
- set hh=0%hhe%
- set mm=%dt:~13,2%
- set ss=%dt:~16,2%
- exit /b
- :dlmsets
- rem Sets for DateLastModified system tag
- set d=%dt:~0,2%
- set m=%dt:~3,2%
- set y=%dt:~6,4%
- set hh=%dt:~11,2%
- set mm=%dt:~14,2%
- set ss=%dt:~17,2%
- exit /b
- :inputdto
- rem Hand input of EXIF DateTimeOriginal tag:
- echo ---
- echo "%~nx1": не найден тэг %extag% (DTO)
- echo Создадим вручную / применим FileModifyDate (FMD) / пропустим файл(ы).
- echo Время последнего изменения файла: %fdto%
- echo.
- echo Введите добавляемую в EXIF дату в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
- echo Либо: "f" для записи FMD в DTO, Enter для пропуска файла,
- echo "fa" для записи FMD в DTO во все .jpg-файлы без DTO.
- set /p dto=
- if -"%dto%"==-"" set fskip=1 & exit/b
- if -"%dto%"==-"f" set dto=%fdto% & echo Записываем FMD в DTO.
- if -"%dto%"==-"fa" set dto=%fdto% & set dtoall=1 & echo Записываем FMD в DTO во все .jpg-файлы.
- exit/b
- :hlp
- rem Helpfile text
- set msg="Задайте файлы/папки через пробел для переименования файлов в формат 'ГГГГ-ММ-ДД_имя.ext' (FileModifyDate), для JPG берётся %extag% (exiv2)."
- set h="%~dp0bin\hlpexif"
- set hv="%temp%\$%~n0-hlp$.vbs"
- chcp 1251 >nul
- echo MsgBox CreateObject("Scripting.FileSystemObject").OpenTextFile(%h%).ReadAll^&vbCrLf^&vbCrLf^&"'%~nx0':"^&vbCrLf^&%msg%,,"%~nx0">%hv%
- chcp 866 >nul
- %hv% & del %hv%
- goto eof
- :e
- echo.
- echo Переименовано %counter% файл(ов).
- pause
- :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement