Следующий пакетный скрипт делает то, что вы хотите. Скопируйте код в файл, назовите его moveOld.bat и поместите в свою папку.
@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
Вы можете запустить сценарий из командной строки или просто дважды щелкнуть сценарий в проводнике Windows.
Скрипт работает, пока ни одно из имен не содержит !
символ - это ограничение может быть снято с помощью дополнительного кода.
Если скрипт найдет в вашей папке устаревший файл, который уже существует в старой папке, он просто перезапишет существующий файл в старой.
Объяснение того, как это работает
Скрипт выводит список всех файлов в каталоге, отсортированных по расширению, а затем по убыванию. Затем список фильтруется с помощью FINDSTR, чтобы сохранить только базовые имена, заканчивающиеся на "_nn", где nn - двузначное число.
Результирующий список файлов обрабатывается FOR /F, по одному за раз. Для каждого файла удаляется суффикс имени из 2 цифр, и результат сравнивается с предыдущим файлом. Если это новое значение, то предыдущее значение обновляется и файл сохраняется. Если значение соответствует предыдущему значению, файл перемещается.