копировать файлы, созданные или измененные сегодня, с помощью robocopy

Я пытаюсь создать пакетный файл в Win7, который будет копировать любые файлы, которые были созданы или изменены сегодня, и копировать их в место назначения с аналогичной структурой каталогов. Это то, что у меня есть до сих пор:

set today="20180721"
robocopy "C:\temp\" "D:\backup\temp\" *.* /s /DCOPY:T /MINAGE:%today%

Я знаю, что /e копирует пустые каталоги, а /xf исключает все файлы, но я не уверен, поможет ли это мне. Приведенный выше код, похоже, копирует все файлы независимо от даты, поэтому я немного заблудился.


person Ghoul Fool    schedule 21.07.2018    source источник
comment
На всякий случай из ответа, предоставленного @Squashman, неясно, вместо создания переменной вы должны иметь возможность использовать: @RoboCopy "C:\Temp" "D:\Backup\Temp" /S /DCopy:T /MaxAge:1 >Nul   -  person Compo    schedule 21.07.2018
comment
forfiles /P "C:\temp" /D -1 /C "cmd /C if @isdir==FALSE (2> nul md @relpath\.. & copy @relpath D:\backup\temp\@relpath)"? (forfiles учитывает только дату, поэтому действительно копирует все файлы, измененные до сегодняшнего дня, а robocopy копирует файлы, измененные до 24 часов)   -  person aschipfl    schedule 22.07.2018


Ответы (2)


Назначение кавычек вашим переменным не является лучшей практикой и вызовет проблемы с некоторыми командами, если вы позже попытаетесь заключить переменную в кавычки. Несмотря на то, что это была не ваша проблема. Ваша проблема в том, что вам нужно использовать опцию /MAXAGE. Читая файл справки, вы должны увидеть это:

/MAXAGE:n : MAXimum file AGE - exclude files older than n days/date.`

Итак, ваш код должен быть:

set "today=20180721"
robocopy "C:\temp\" "D:\backup\temp\" *.* /s /DCOPY:T /MAXAGE:%today%

Предположим, вы думали, что варианты были для ВКЛЮЧИТЬ.

person Squashman    schedule 21.07.2018

Параметры /MINAGE//MAXAGE robocopy относятся к полной дате и времени. , поэтому укажите что-то вроде /MAXAGE:1 фильтров для файлов, которые были изменены в течение последних 24 часов.

Если вы хотите обрабатывать файлы, которые были изменены только сегодня, то есть в отношении даты, но не времени, вы можете использовать forfiles и его параметр '/D', например:

set "DEST=D:\backup\temp"
forfiles /P "C:\temp" /D +0 /C "cmd /C if @isdir==FALSE for %%Z in (@relpath) do @(2> nul md 0x22%DEST%\%%~Z\..0x22 & copy @relpath 0x22%DEST%\%%~Z0x22)"
person aschipfl    schedule 22.07.2018