У меня есть локальный диск, содержащий каталог для каждого пользователя:
c: \ user1 \
c: \ user2 \
c: \ user3 \
и у меня есть удаленный диск (через общий ресурс), содержащий то же дерево каталогов:
f: \ user1 \
е: \ пользователь2 \
f: \ user3 \
внутри каждого каталога может быть любое количество файлов, но все они имеют формат .txt. Я пытался создать командный файл, который может выполнять итерацию в локальных каталогах и копировать файлы новее, чем временная метка X, в соответствующий каталог на f :.
Есть ли способ добиться этого с помощью xcopy или copy плюс некоторой пакетной магии?
Спасибо!
РЕДАКТИРОВАТЬ: чтобы избежать путаницы: мне нужно проанализировать каталоги пользователей (может иметь ЛЮБОЕ имя), захватить файлы более новые, чем те, которые были скопированы в последний раз, и скопировать их в каталог с тем же именем на F: \
копировать . это не то, что я пытаюсь сделать. скорее:
for /f "tokens=*" %%a IN ('dir /b c:\users\*') do call dobackup.bat "%%a"
или похожие
Robocopy - ваш друг в этом. У него есть флаг, который сделает именно то, что вы хотите.
robocopy c:\ f:\ /mir /r:1 /sec
Это сделает зеркальную копию, повторяя попытку открытия файлов перед тем, как двигаться дальше, а также скопирует безопасность. Зеркальная копия также удалит файлы из F: \, которые больше не существуют на C: \, чего xcopy не может. Кроме того, после первой синхронизации будут скопированы только более новые файлы.
Если robocopy по какой-то причине невозможен, вы можете закрыть его с помощью xcopy.
xcopy C:\*.* F:\*.* /S/E/H/D
Это скопирует всю структуру C: \ в F: \, скопирует скрытые файлы и скопирует только новые. Однако он не удалит файлы из F: \, которые существуют в C: \.
Редактировать:
Возможно, это сделает то, что вы хотите:
for /D %D in (C:\User*\) do xcopy C:\User%D\*.* F:\User%D /s /e /d 08-01-2010
Это будет перебирать все каталоги с пользователем в них и копировать файлы новее, чем первое августа.
Хорошо, если я помещу командный файл в C: \ users \, тогда
for /D %%a IN (*) do call robocopy %%a\ f:\%%a\ *.txt /mir /r:1 /sec
работает