Нечто подобное может служить вашей цели:
SET "src_root=D:\root\for\source\directories"
SET "tgt_path=\\NETWORK\SHARE\target\path"
DIR "%src_root%" /B /AD /O-D /TC > "%TEMP%\dirlist.tmp"
< "%TEMP%\dirlist.tmp" SET /P last_dir=
FOR /D %%I IN ("%tgt_path%\*") DO RD "%%I" /S /Q
DEL "%tgt_path%\*" /Q
XCOPY "%src_root%\%last_dir%\*" "%tgt_path%" /S /E
Предполагается, что переменная src_root
содержит путь к папке, в которой создаются ежедневные папки, а tgt_path
- это целевой путь для копирования содержимого последней папки.
Команда DIR
настроена на возврат содержимого корневой папки следующим образом:
без дополнительной информации в выходных данных, только имена (/B
);
без файлов, только папки (/AD
);
сортировка (/O…
) выходных данных в порядке убывания даты папки (…D
);
дата - дата создания папки (/TC
).
Вывод перенаправляется во временный файл, первая строка которого затем читается в переменную (команда SET /P
). Эта часть информации, вместе с корневым путем и целевым путем, в конечном итоге используется сначала при удалении, а затем при копировании файлов.
Удаление выполняется в два этапа: сначала папки (команда RD
в цикле FOR /D
), затем файлы (DEL
). Я хотел бы отметить, что этот сценарий не предполагает вмешательства на каком-либо этапе с вашей стороны, что, как я понял, было вашим намерением. Следовательно, он не ожидает подтверждения удаления файлов и папок по целевому пути, поэтому при запуске сценария старое содержимое будет удалено без вывода сообщений (что является результатом действия /Q
переключатель используется с RD
и DEL
).
Копирование выполняется с помощью XCOPY
, поскольку это позволяет нам сохранить структуру исходной папки (переключатель /S
), включая пустые подкаталоги (/E
), если таковые имеются.
Вы можете получить больше информации о каждой упомянутой здесь команде, вызвав любую из них с помощью ключа /?
в командной строке.