Копировать содержимое последних / новейших окон папок - PullRequest
4 голосов
/ 08 января 2012

У меня есть кое-что, что создает новую папку с файлами каждую ночь. Кто-нибудь знает, как создать сценарий, который будет копировать содержимое самой новой / последней папки в общий сетевой ресурс и перезаписывать любые файлы и папки в общем сетевом ресурсе? Давно почесал голову.

Заранее спасибо.

1 Ответ

9 голосов
/ 09 января 2012

Нечто подобное может служить вашей цели:

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), если таковые имеются.

Вы можете получить больше информации о каждой упомянутой здесь команде, вызвав любую из них с помощью ключа /? в командной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...