Как скопировать только новые файлы из папки в папку
Перейти к содержимому

Как скопировать только новые файлы из папки в папку

  • автор:

Команда XCOPY — копирование файлов и каталогов.

Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке Windows

Формат командной строки:

XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]. ]

Параметры командной строки:

источник — Копируемые файлы.

целевой_объект — Расположение или имена новых файлов.

/A — Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.

/M — Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.

/D:m-d-y — Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.

/EXCLUDE:файл1[+файл2][+файл3]. — Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.

/P — Вывод запросов перед созданием каждого нового файла.

/S — Копирование только непустых каталогов с подкаталогами.

/E — Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.

/V — Проверка размера каждого нового файла.

/W — Вывод запроса на нажатие клавиши перед копированием.

/C — Продолжение копирования вне зависимости от наличия ошибок.

/I — Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.

/Q — Запрет вывода имен копируемых файлов.

/F — Вывод полных имен исходных и целевых файлов.

/L — Вывод имен копируемых файлов.

/G — Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.

/H — Копирование, среди прочих, скрытых и системных файлов.

/R — Перезапись файлов, предназначенных только для чтения.

/T — Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.

/U — Копирование только файлов, уже имеющихся в целевом каталоге.

/K — Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты «Только для чтения».

/N — Использование коротких имен при копировании.

/O — Копирование сведений о владельце и данных ACL.

/X — Копирование параметров аудита файлов (подразумевает ключ /O).

/Y — Подавление запроса подтверждения на перезапись существующего целевого файла.

/-Y — Запрос подтверждения на перезапись существующего целевого файла.

/Z — Копирование сетевых файлов с возобновлением.

/B — Копирование символической ссылки вместо ее целевого объекта.

/J — Копирование с использованием небуферизованного ввода/вывода. Рекомендуется для очень больших файлов.

Ключ /Y можно установить через переменную среды COPYCMD.

Ключ /-Y командной строки переопределяет такую установку.

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

XCOPY /? — выдать краткую справку по использованию команды.

xcopy C:\users D:\copy1 — скопировать файлы из каталога C:\users в каталог D:\copy1 . Будет выполняться копирование без подкаталогов и только файлов без атрибутов «Скрытый» и «Системный». Для скопированных файлов будет установлен атрибут Архивный . Если каталог, в который выполняется копирование, не существует, то пользователю будет выдано сообщение:

Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D

После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:

xcopy C:\users D:\copy1 /I

xcopy C:\users D:\copy1 /H /Y /C — копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут «Только чтение», то копирование не выполняется. Для перезаписи таких файлов используется ключ /R

xcopy C:\users D:\copy1 /H /Y /C /R /S — скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом «Только чтение» (/R) и игнорированием ошибок ( /C )

xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt — то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:

\User1\ — исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* — исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание «de»

xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt — то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I — копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 — то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T — создать структуру папок диска C: в каталоге D:\copy1\LISTDIR . Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.

Для добавления новых файлов в каталоги и обновления существующих на более поздние версии, можно использовать команду REPLACE.

CMD/BAT: Копирование только новых файлов

Здравствуйте. Задача состоит в следующем:
На диске X:\ формируются файлы с расширением bak. Нужно в папку Y каждый день копировать только новые файлы (к примеру bat-файл запустится в 8 утра и должен скопировать файлы за сегодняшнее число).
Спасибо.

2 Ответ от smaharbA 2012-09-10 14:09:03 (изменено: smaharbA, 2012-09-10 14:13:57)

Re: CMD/BAT: Копирование только новых файлов

если без подпапок и дата создания совпадает с датой модификации

echo off
set s=y:\*.bak
set d=%homedrive%\моя папка\куда копирую\
mkdir «%y%» > nul 2>&1
xcopy /d:%date:~3,2%-%date:~0,2%-%date:~-4% «%s%» «%d%» /y

а так есть для этих целей forfiles

Я конечно далек от мысли. (с)

3 Ответ от angelraven 2012-09-10 14:31:30

Re: CMD/BAT: Копирование только новых файлов

smaharbA пишет:

если без подпапок и дата создания совпадает с датой модификации

Дата создания и модификации не совпадают. Файлы перезаписываются, поэтому дата создания не меняется.

4 Ответ от smaharbA 2012-09-10 14:49:54

Re: CMD/BAT: Копирование только новых файлов

пример копирует все с датой модификации равной или позднее текущей

Я конечно далек от мысли. (с)

5 Ответ от smaharbA 2012-09-10 15:27:04

Re: CMD/BAT: Копирование только новых файлов

если интересует именно дата создания, то либо forfiles либо примерно так

echo off setlocal ENABLEDELAYEDEXPANSION set s=x:\ set d=c:\моя папка\для копирования\ set ext=doc mkdir "%d%\" 2> nul set dd=25.03.2011 rem либо - set dd=%date% - если нужна текущая дата for /r "%s%" %%x in (*.%ext%) do ( for /f %%y in ('dir /o:-d /t:c "%%~x" ^| find "%%~nxx"') do ( set t=%%y set t=!t:~-4!!t:~3,2!!t:~0,2! if !t! geq %dd:~-4%%dd:~3,2%%dd:~0,2% ( xcopy "%%~x" "%d%\%%~px" /i /y ) ) )

Я конечно далек от мысли. (с)

6 Ответ от angelraven 2012-09-10 16:04:05

Re: CMD/BAT: Копирование только новых файлов

7 Ответ от yuriy2000 2012-09-11 21:03:55

Re: CMD/BAT: Копирование только новых файлов

если файлы копируются/создаются на диске X:, то можно использовать атрибут «Архивный»

скопировать все файлы с расширением .BAK и с атрибутом «Архивный» с диска X: на диск Y:

xcopy /s /m X:\*.bak y:\Backup

можно запускать сколько угодно раз в день — будут копироваться только «новые» файлы.

из Справки XCOPY

/M Копирует файлы только с атрибутом «Архивный»,
при этом атрибут «Архивный» отключается.

8 Ответ от angelraven 2012-09-12 08:25:05 (изменено: angelraven, 2012-09-12 08:34:26)

Re: CMD/BAT: Копирование только новых файлов

yuriy2000 пишет:

если файлы копируются/создаются на диске X:, то можно использовать атрибут «Архивный»

скопировать все файлы с расширением .BAK и с атрибутом «Архивный» с диска X: на диск Y:

xcopy /s /m X:\*.bak y:\Backup

можно запускать сколько угодно раз в день — будут копироваться только «новые» файлы.

из Справки XCOPY

/M Копирует файлы только с атрибутом «Архивный»,
при этом атрибут «Архивный» отключается.

Интересная мысль! Попробуем. Спасибо большое. Я еще попробовал вариант с использованием robocopy, это конечно не совсем cmd но раз уж она присутствует в системах начиная с Vista, почему бы и нет. В robocopy реализованы простые команды и параметры именно для копирования.
В моем случае код выглядит так:

net use o: \\192.168.1.4\backup_1c robocopy.exe "e:\backup_1c" "o:" *.bak /MAXAGE:1 net use o: /delete

Подключаем сетевой диск O:, копируем туда файлы не старее одного дня (/MAXAGE:1). Затем отключаем сетевой диск. Можно не использовать сетевой диск а указывать сразу путь для копирования \\имя компьютера\расшаренная папка

Копирование новых и измененных файлов с учетом атрибута LastModifiedDate в Фабрике данных Azure

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

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

Информация о шаблоне решения

Этот шаблон сначала выбирает новые и измененные файлы только по их атрибуту LastModifiedDate, а затем копирует их из исходного хранилища данных в целевое.

Шаблон содержит одно действие:

  • Копировать — копирует новые и измененные файлы только по их атрибуту LastModifiedDate из хранилища файлов в целевое хранилище.

В шаблоне определены шесть параметров:

  • FolderPath_Source — путь к папке, в которой можно считать файлы из исходного хранилища. Вам нужно заменить значение по умолчанию на правильный путь к папке.
  • Directory_Source — путь к вложенной папке, в которой можно считать файлы из исходного хранилища. Вам нужно заменить значение по умолчанию на правильный путь к вложенной папке.
  • FolderPath_Destination — путь к папке в целевом хранилище, в которую нужно скопировать файлы. Вам нужно заменить значение по умолчанию на правильный путь к папке.
  • Directory_Destination — путь к вложенной папке в целевом хранилище, в которую нужно скопировать файлы. Вам нужно заменить значение по умолчанию на правильный путь к вложенной папке.
  • LastModified_From — используется для выбора файлов, у которых значение атрибута LastModifiedDate больше или равно этому значению даты и времени. Чтобы выбрать только новые файлы, которые не были скопированы в последний раз, это значение datetime может быть временем, когда конвейер был активирован в последний раз. Вы можете заменить значение по умолчанию «2019-02-01T00:00:00Z» ожидаемым значением LastModifiedDate в часовом поясе UTC.
  • LastModified_To — используется для выбора файлов, у которых значение атрибута LastModifiedDate меньше этого значения даты и времени. Чтобы выбрать только новые файлы, которые не были скопированы в предыдущих запусках, это значение даты и времени может быть в настоящее время. Вы можете заменить значение по умолчанию «2019-02-01T00:00:00Z» ожидаемым значением LastModifiedDate в часовом поясе UTC.

Использование шаблона решения

  1. Перейдите в коллекцию шаблонов на вкладке «Автор» в Фабрика данных Azure, а затем нажмите + кнопку, конвейер и, наконец, коллекцию шаблонов. Снимок экрана: открытие коллекции шаблонов на вкладке
  2. Найдите шаблон Копировать новые файлы только lastModifiedDate , выберите его, а затем нажмите кнопку «Продолжить«. Снимок экрана: поиск и выбор шаблона LastModifiedDate для копирования новых файлов.
  3. Создайте новое подключение к целевому хранилищу. Это хранилище, в которое требуется скопировать файлы. Создание нового подключения к источнику
  4. Создайте новое подключение к исходному хранилищу. Это хранилище, из которого нужно копировать файлы. Создание нового подключения к целевому хранилищу
  5. Выберите Использовать этот шаблон. Использовать этот шаблон
  6. На панели откроется доступный конвейер, как показано в следующем примере: Отображение конвейера
  7. Выберите «Отладка«, напишите значение для параметров и нажмите кнопку «Готово«. На рисунке, приведенном ниже, мы задали параметры следующим образом.
    • FolderPath_Source = sourcefolder
    • Directory_Source = subfolder
    • FolderPath_Destination = destinationfolder
    • Directory_Destination = subfolder
    • LastModified_From = 2019-02-01T00:00:00Z
    • LastModified_To = 2019-03-01T00:00:00Z

В примере указывается, что файлы, которые были в последнее время изменены в интервале времени (2019-02-01T00:00:00Z до 2019-03-01T00:00:00Z) будут скопированы из исходной папки пути источника или вложенной папки в папку назначения пути назначения или вложенной папки. Эти времена или папки можно заменить собственными параметрами.

Запуск конвейера

  • Просмотрите результаты. В целевое хранилище копируются только те файлы, которые были изменены в заданном диапазоне времени. Просмотр результатов
  • Теперь можно добавить периодический триггер для автоматизации этого конвейера, чтобы конвейер всегда периодически копировал новые и измененные файлы только с учетом атрибута LastModifiedDate. Выберите Добавить триггер, а затем — New/Edit (Создать или изменить). Снимок экрана: пункт меню New/Edit, который отображается при выборе пункта
  • В окне Add Triggers (Добавление триггеров) выберите + Создать.
  • Выберите тип триггера Tumbling Window (Периодический) и установите периодичность Каждые 15 минут(здесь можно задать любой интервал). Для параметра «Активировано» установите значение Да и нажмите кнопку ОК. Создание триггера
  • В разделе Trigger Run Parameters (Параметры запуска триггера) задайте значения, как указано ниже, и нажмите кнопку Готово.
    • FolderPath_Source = sourcefolder. Вы можете заменить это значение папкой в своем исходном хранилище данных.
    • Directory_Source = subfolder. Вы можете заменить это значение вложенной папкой в своем исходном хранилище данных.
    • FolderPath_Destination = destinationfolder. Вы можете заменить это значение папкой в своем целевом хранилище данных.
    • Directory_Destination = subfolder. Вы можете заменить это значение вложенной папкой в своем целевом хранилище данных.
    • LastModified_From = @trigger().outputs.windowStartTime. Это системная переменная из триггера, определяющего время последнего запуска конвейера.
    • LastModified_To = @trigger().outputs.windowEndTime. Это системная переменная из триггера, определяющего время, когда конвейер активируется на этот раз.

    Входные параметры

  • Выберите Опубликовать все. Опубликовать все
  • Создайте новые файлы в исходной папке исходного хранилища данных. Теперь вы ожидаете, что конвейер будет активирован автоматически, и только новые файлы копируются в целевое хранилище.
  • Выберите вкладку «Монитор» на левой панели навигации и подождите около 15 минут, если повторение триггера было установлено каждые 15 минут.
  • Просмотрите результаты. Конвейер активируется автоматически каждые 15 минут, а новые или измененные файлы из исходного хранилища копируются в целевое хранилище в каждом запуске конвейера. Снимок экрана: результаты, возвращаемые при активации конвейера.
  • Связанный контент

    forum.farmanager.com

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

    ObSerV Posts: 53 Joined: Wed 29 Jul, 2009 06:26 Been thanked: 1 time

    Re: Копирование только отличающихся файлов

    Post by ObSerV » Sun 12 May, 2013 11:55

    хм. Из стандартных есть f9 — команды — сравнение папок.
    И есть настройка «копировать только новые/обновленные» в диалоге копирования.

    ObSerV

    AK Posts: 2 Joined: Sun 12 May, 2013 11:32

    Re: Копирование только отличающихся файлов

    Post by AK » Sun 12 May, 2013 12:06

    Сравнение папок не учитывает подкаталоги (их тоже очень и очень много).
    В диалоге копирования нет пункта «новые/обновленные». Есть: Вместо, Пропустить, Имя, Добавить, Отменить.

    Параллельно возник вопрос: можно ли в фаре менять права доступа НТФС (как в тоталкоммандере) ?

    HaRT Moderator Posts: 10871 Joined: Tue 30 Aug, 2005 17:21 Has thanked: 221 times Been thanked: 359 times

    Post by HaRT » Sun 12 May, 2013 12:28

    AK
    Поищите тут по форуму по словам “синхронизация каталогов”.

    А для отдельных вопросов заводите отдельные темы, не надо всё валить в одну кучу.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *