Я работаю в области управления документами и храню большое количество документов в одной папке, эта папка также содержит папку с именем "старая".

Что мне нужно сделать, так это отфильтровать тысячи документов в основной папке и поместить старые ревизии в старую папку (вырезать, а не копировать!). Можно ли сделать это с помощью команды CMD Command?

Все мои документы имеют одинаковую структуру имен:

xxx_01.pdf для редакции 01

xxx_02.pdf для редакции 02 и т. д. (формат не является исключительно pdf).

1 ответ1

2

Следующий пакетный скрипт делает то, что вы хотите. Скопируйте код в файл, назовите его 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 цифр, и результат сравнивается с предыдущим файлом. Если это новое значение, то предыдущее значение обновляется и файл сохраняется. Если значение соответствует предыдущему значению, файл перемещается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .