Eu não sei como seus nomes de arquivos jpg se parecem, mas pode ser uma escolha melhor para ver se há alguma marca nos arquivos para renomeá-los com data, localização qualquer.
Para copiar / mover para uma única pasta simples, esse lote pode ajudá-lo.
Edite as vars BaseDir
e Dest
para se adequar ao seu ambiente.
Os arquivos são verificados com fc.exe se eles são duplicatas reais, caso em que eles não são movidos.
Se diferente, um explorador como o número entre parênteses (1)
é anexado.
Para que isso aconteça em uma extensão diferente, o var Ext
pode ser adaptado de acordo.
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "BaseDir=Q:\Test16\"
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