1 (изменено: angelraven, 2012-09-10 09:50:08)

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

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

2 (изменено: 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

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

smaharbA пишет:

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

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

4

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

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

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

5

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

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

Спасибо огромное!:)

7

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

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

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

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

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

из Справки XCOPY

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

8 (изменено: 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). Затем отключаем сетевой диск. Можно не использовать сетевой диск а указывать сразу путь для копирования \\имя компьютера\расшаренная папка

9

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

а нафига диск монтировать ?

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

10 (изменено: angelraven, 2012-09-12 10:44:12)

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

smaharbA пишет:

а нафига диск монтировать ?

Как то я столкнулся с тем, что в CMD указывая пусть вида "\\комп\папка" выдавалась ошибка. А вот смонтировав диск пусть указывался как "Диск:\". Здесь я просто решил оставить, т.к. не знал что в robocopy можно указывать папку назначения в виде "\\комп\папка". Но потом вычитал в хелпе что можно. Кстати об этом я и написал в прошлом сообщении.

Можно не использовать сетевой диск а указывать сразу путь для копирования \\имя компьютера\расшаренная папка