Я не знаю, как выглядят имена ваших jpg-файлов, но может быть лучше посмотреть, есть ли в файлах какие-либо теги, чтобы переименовать их с указанием даты и местоположения.
Для копирования / перемещения в одну плоскую папку эта партия может вам помочь.
Отредактируйте vars BaseDir
и Dest
в соответствии с вашей средой.
Файлы проверяются с помощью fc.exe, если они являются реальными дубликатами, и в этом случае они не перемещаются.
Если отличается от проводника, например число в скобках (1)
.
Для того, чтобы этот акт имел другое расширение, var Ext
может быть соответствующим образом адаптирован.
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "BaseDir=Q:\Test\2016\"
Set "Dest=Q:\Test\jpg\"
Set "Ext=.jpg"
Pushd "%BaseDir%"
For /f "delims=" %%A in ('Dir /B /S /A-D *%Ext% 2>Nul'
) Do If Not Exist "%Dest%%%~nxA" (
Move "%%~fA" "%Dest%" >Nul
) Else (
Set Cnt=1
Call :MoveInc "%%A" "%Dest%%%~nxA"
)
PopD
Goto :EOF
:MoveInc
:: Check if file is a duplicate
Fc.exe /B %1 %2 >Nul 2>&1 && (Echo %1 is a duplicate of %2 &Goto :Eof)
:: Check if name already has (x) appended
Set BaseName=%~n1
Echo %BaseName%|Findstr "([0-9][0-9]*)$" 1>NUL 2>&1 || Goto :Next
:: Get already present number, since " (1)" is at least 4 chars
Set Last=-4
:Again
Echo:!BaseName:~%Last%!|Find " (">NUL||(Set /A Last-=1&Goto :Again)
Set "BaseName=!BaseName:~0,%Last%!"
Set /A Cnt=!BaseName:~%Last%! +1
:Next
Set "NewName=%Dest%%BaseName% (%Cnt%)%~x1"
If Exist "%NewName%" (Set /A Cnt+=1 & Goto :Next)
Move %1 "%NewName%" >Nul
Goto :Eof