Копирование файлов с определенной датой

Обновлено: 02.07.2024

Всем доброго времени суток!
Помогите! Нужен скрипт который будет отбирать файлы из папки и подпапок за текущую дату(создание и изменение). и копировать в другую папку.
Спасибо!

Если через forfiles (возможно, отсутствует в системе), то можно так:

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум

Надо, чтобы и измененные и созданные перекидывал, и желательно все в одну кучу, без сохранения пути в новой папки.

amel27 спасибо.
Надо чтобы измененные и созданные перекидывал, и желательно все в одну кучу, без сохранения

amel27 Спасибо!
Надо, чтобы и измененные и созданные перекидывал, и желательно все в одну кучу, без сохранения пути в новой папки.
amel27 спасибо.
Надо чтобы измененные и созданные перекидывал, и желательно все в одну кучу, без сохранения »
Надо чтобы измененные и созданные перекидывал, и желательно все в одну кучу, без сохранения
мне нужен как раз такой батник что бы
как в шапке
Нужен скрипт который будет отбирать файлы из папки и подпапок за текущую дату(создание и изменение). и копировать в другую папку.
Спасибо!
создал батник
xcopy /s /y /d:%DATE:

6,4% "E:\test\*" "E:\test2\"
при запуске сразу закрывается,а если с командной строки то пишет скопировано 0 файлов

Посмотрите, как отобразилась дата Должно быть
xcopy /s /y /d:10-27-2016 "E:\test\*" "E:\test2\"

Сделайте Dir "E:\test\*" - там есть файлы? И есть ли там файлы с датой за сегодняшний день?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Последний раз редактировалось megaloman, 27-10-2016 в 11:20 .

Посмотрите, как отобразилась дата
Сделайте Dir "E:\test\*" - там есть файлы? »

C:\Users\sysadmin\Desktop>echo xcopy /s /y /d:10-27-2016 "E:\test\*" "E:\test2\"
xcopy /s /y /d:10-27-2016 "E:\test\*" "E:\test2\"

C:\Users\sysadmin\Desktop>pause
Для продолжения нажмите любую клавишу . . .
если ввести
Dir "E:\test\*"
то выходит
Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

C:\Users\sysadmin>Dir "E:\test\*"
Том в устройстве E не имеет метки.
Серийный номер тома: C64A-6ED9

Содержимое папки E:\test

27.10.2016 11:15 <DIR> .
27.10.2016 11:15 <DIR> ..
27.10.2016 11:15 <DIR> Runnerv3
0 файлов 0 байт
3 папок 96*145*170*432 байт свободно

непонятно почему не работает

Последний раз редактировалось vsokol, 27-10-2016 в 11:25 . Причина: дополнил

Самый простой и очевидный способ узнать дату и время последнего доступа, создания и модификации файла — это просмотреть их в свойствах этого файла. Все эти данные будут указаны на первой же вкладке «Общие», только вот считать их истинными у нас нет основания. Почему? Потому что всякий раз, когда мы копируем файлы в другое расположение, мы как-бы создаём их заново, в результате чего их временные метки меняются, точнее, всем скопированным файлам присваивается текущая дата создания, тогда как дата изменения остаётся прежней. А теперь представьте, что у вас на диске имеются некие файлы, которые вы хотите скопировать на другой диск или флешку, сохранив при этом дату создания.

Как скопировать файлы с диска на диск с сохранением временных меток


Если файл один или несколько, у вас есть немного времени, и вы ничего не имеете против китайского софта, можете воспользоваться Change Timestamp — бесплатной портативной утилитой для редактирования временных меток файлов и каталогов. Главное — записать или запомнить временные метки файлов, которые вы хотите копировать. Рассмотрим работу с утилитой на конкретном примере. У нас есть файл с датой и временем создания 24 февраля 2012 года 16.00.47. Первым делом копируем файл на другой диск. Естественно, его дата создания заменяется текущей.

Запускаем утилиту Change Timestamp, отмечаем флажком чекбокс «The file was Crеated», выставляем в полях «New Date» и «New Time» старую дату и время, а затем просто перетаскиваем скопированный файл на окошко программы. Временная метка будет установлена в соответствии с заданной. Аналогичным образом можно изменить дату модификации и дату последнего доступа, отметив флажком чекбоксы «Last Modified» и/или «Last Accessed for reading» соответственно. Кстати, программой Change Timestamp поддерживается рекурсивная обработка содержимого каталогов.
Использование robocopy

Если файлов много и временные метки у них разные, Change Timestamp не подойдёт. Для таких случаев в Windows предусмотрен собственный консольный инструмент robocopy.exe, который умеет сохранять при копировании с диска на диск временные метки и прочие метаданные. Утилита robocopy.exe поддерживает множество параметров, но нам достаточно знать только четыре. Сама же команда копирования выглядит образом:


robocopy "папка, из которой копируется" "папка, в которую копируется" /E /MIR /COPYALL /DCOPY:T
Сформированную команду выполняем в командной строке или консоли PowerShell. В двойных кавычках указывается полный путь к каталогам, если в путях нет пробелов, кавычки можно опустить. В результате будут скопированы все файлы и каталоги из первой папки во вторую с сохранением даты и времени создания. Если кому интересно, за сохранение всех временных меток отвечает ключ /DCOPY:T, остальные ключи являются дополнительными, так, ключ /E включает рекурсию, /MIR отзеркаливает дерево папок, а /COPYALL сохраняет метаданные копируемых файлов.

Если вы переместите файлы с одного жесткого диска или логического раздела на другой, их временные метки будут автоматически перезаписаны. Это не всегда бывает нужно, у вас может быть множество причин сохранить исходные временные метаданные. Существуют программы для синхронизации данных, которые позволяют сохранять временные метки, по крайней мере, так утверждают разработчики этих программ, но зачем засорять диск сторонним ПО, если то же самое можно сделать средствами Windows?

Во всех популярных версиях Windows имеется штатная утилита robocopy.exe, которая как раз умеет сохранять метаданные файлов и каталогов при их копировании на другой раздел или физический диск.

Чтобы скопировать файлы с одного диска на другой, откройте от имени администратора командную строку и выполните команду следующего вида:

robocopy "путь к исходным данным" "путь к целевой папке" /E /MIR /COPYALL /DCOPY:T

Robocopy

Ключ /E задает копирование всех вложенных каталогов, ключ /MIR создает зеркало дерева папок, /COPYALL включает копирование всех сведений о файлах (метаданные) , наконец, ключ /DCOPY:T копирует все временные метки, что нам и нужно.

Сохраняются все временные метки — дата создания, модификации и последнего доступа, но при условии, что копирование производится на диск с файловой системой NTFS. Если данные будут скопированы на флешку с файловой системой FAT32, дата последнего доступа будет изменена на текущую.

Редактирование временных меток в Change Timestamp

Если речь идет об одном или нескольких файлах, для «восстановления» исходной временной метки можно воспользоваться бесплатной утилитой Change Timestamp.

Интерфейс утилиты представлен небольшим окошком, в верхней части которого имеются поля для ввода даты и времени, а в нижней — блок с тремя опциями «The file was Crеated» (дата создания) , «Last Modified» (дата модификации) и «Last Accessed for reading» (дата последнего доступа) .

Установите нужные вам дату и время, отметьте флажками нужные метки и перетащите файл либо группу файлов на окошко Change Timestamp.

Change Timestamp

Временные метки тут же будут изменены, в чём вы сами сможете убедиться, открыв свойства обработанного файла.

Поддерживает утилита и обработку каталогов.

Если спустя некоторое время вы заметите, что временные метки обработанных файлов изменились, отключите в оснастке управления службами службу индексирования Windows Search.

Служба индексирования Windows Search

Или предварительно перед обработкой переместите файлы в каталог, который не индексируется этой службой.

XCOPY - описание команды и примеры использования

XCOPY - Копирует файлы и каталоги, включая подкаталоги.

Синтаксис

xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [/a|/m>] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [/y|/-y>] [/z]

Параметры

Примечания

Для анализа кодов завершения, выведенных командой xcopy, используйте параметр уровень_ошибки в командной строке if пакетных программ.

В следующей таблице перечислены коды завершения с кратким описанием.

Код завершения Описание
0 Файлы скопированы без ошибок
1 Файлы для копирования не найдены
2 Нажата комбинация CTRL+C для остановки команды xcopy
4 Возникла ошибка инициализации. Недостаточно места в памяти или на диске, введено неверное имя диска или неверный синтаксис вызова команды
5 Диск защищен от записи

Примеры использования

Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска A на диск B, введите:

Чтобы включить в операцию копирования предыдущего примера системные и скрытые файлы следует использовать параметр /h:

Чтобы обновить файлы в каталоге \Reports файлами из каталога \Rawdata, измененными после 29 декабря 1993 года, введите:

Чтобы обновить файлы предыдущего примера, уже существующие в каталоге \Reports, независимо от их даты, введите следующую команду:

Чтобы получить списк файлов, которые были бы скопированы в предыдущем примере, следует ввести команду:

Список файлов, которые были бы скопированы, находится в файле Xcopy.out.

Чтобы скопировать каталог \Customer и все подкаталоги \\Public\Address на сетевой диск H, сохранить у файлов атрибут «только для чтения», введите команду:

Для запуска программы xcopy и анализа кодов завершения можно создать пакетный файл и использовать оператор if для обработки кодов завершения в случае возникновения ошибок. Например, следующая пакетная программа использует замещаемые параметры для задания источникаxcopy и результата:

Эта пакетная программа может быть использована для копирования всех файлов каталога C:\Prgmcode и его подкаталогов на диск B следующим образом:

Читайте также: