O script em lote a seguir faz o que você deseja. Copie o código em um arquivo e chame-o de moveOld.bat e coloque-o na sua pasta.
@echo off
setlocal enableDelayedExpansion
pushd "%~dp0"
set "prev="
for /f "eol=: delims=" %%F in (
'dir /b /a-d /oe-n *^|findstr /r "_[0-9][0-9]\.[^.]*$"'
) do (
set "next=%%~nF"
set "next=!next:~0,-2!%%~xF"
if !next! neq !prev! (
set "prev=!next!"
) else (
move /y "%%F" old >nul
)
)
popd
Você pode executar o script em um prompt de comando ou simplesmente clicar duas vezes no script no Windows Explorer.
O script funciona desde que nenhum dos nomes contenha o caractere !
- essa limitação pode ser removida com código extra.
Se o script encontrar um arquivo desatualizado na sua pasta que já existe na pasta antiga, ele simplesmente sobregravará o arquivo existente em antigo.
Explicação de como funciona
O script lista todos os arquivos no diretório, classificados por extensão e, em seguida, por nome decrescente. A lista é então filtrada por FINDSTR para preservar apenas os nomes de base que terminam com "_nn", em que nn é um número de 2 dígitos.
A lista de arquivos resultante é processada por FOR / F, uma por vez. Para cada arquivo, o sufixo de nome de 2 dígitos é removido e o resultado comparado ao arquivo anterior. Se for um novo valor, o valor anterior será atualizado e o arquivo será preservado. Se o valor corresponder ao valor anterior, o arquivo será movido.