Войти

Показать полную графическую версию : Копирование файлов без замены


astronomares
02-10-2013, 11:14
Подскажите пожалуйста есть ли возможность создать такой батник.
он должен из одной папки скопировать во вторую файлы новые за сегодня.
copy дает возможность копировать файлы с заменой. но мне надо чтобы во второй папке файлы которые уже там есть не перезаписывались (т.к. 2ая папка будет использоваться как бэкап)
т.е. пусть он копирует все папки и файлы, но если имена совпадают то он не будет их менять. или это можно как то по-другому сделать?

Iska
02-10-2013, 12:48
astronomares, сначала определитесь, что Вам таки нужно, затем изложите это внятно и по-русски.

astronomares
02-10-2013, 13:37
нужно.
взять файлы из одной папки и перенести в другую.
но каждый день в первую добавляются новые.
и их тоже каждый день нужно добавлять во вторую папку, но так чтобы если имена совпадут чтобы старые файлы не перезаписались.

sunnykey
02-10-2013, 14:23
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
$OlderThan=New-TimeSpan -Days 1
$CurFiles=Get-ChildItem c:\TestFolder\* -Recurse -Force | `
? {$_.CreationTime -gt ((Get-Date)-$OlderThan)} | `
Copy-Item -Destination C:\Backup -Recurse -ErrorAction Continue

astronomares
02-10-2013, 14:31
$OlderThan=New-TimeSpan -Days 1
$CurFiles=Get-ChildItem c:\TestFolder\* -Recurse -Force | `
? {$_.CreationTime -gt ((Get-Date)-$OlderThan)} | `
я так понял он проверяет фАЙЛЫ НА ИЗМЕНЕНИЕ и копирует их?

astronomares
02-10-2013, 15:47
а нельзя сделать проверку по имени, а не по дате созданий файлов?

Iska
02-10-2013, 16:16
а нельзя сделать проверку по имени, а не по дате созданий файлов? »
Я же просил выше изложить внятно. В итоге, до:
он должен из одной папки скопировать во вторую файлы новые за сегодня. »
и после:
взять файлы из одной папки и перенести в другую. »
а нельзя сделать проверку по имени, а не по дате созданий файлов? »
Приведите тогда хотя бы примеры имён файлов.

El Sanchez
02-10-2013, 16:40
а нельзя сделать проверку по имени, а не по дате созданий файлов? »
astronomares,

@Echo Off
SetLocal
Set Source=C:\Source
Set Output=C:\Output

Echo:N|XCopy /ih "%Source%\*.*" "%Output%" 1>nul

astronomares
02-10-2013, 16:41
а есть разница какие имена у файлов?
пусть будет
источник c:\papka1\file1.xls
то куда надо c:\papka2\
соответственно внутри папок много файлов.

просто не понимаю смысл в четких названиях. можно назвать папка1 и папка2 и файлы по такому же принципу.
Или объясните что для чего четкие название файлов.

Echo:N|XCopy /ih "%Source%\*.*" "%Output%" 1>nul »

а что делает команда 1>nul

Iska
02-10-2013, 16:54
Или объясните что для чего четкие название файлов. »
Нет уж, это Вы объясните, что есть:
сделать проверку по имени »

а что делает команда 1>nul »
Перенаправляет вывод утилиты со стандартного устройства вывода на устройство «nul». Проще говоря — подавляет вывод.

astronomares
02-10-2013, 17:24
пусть будет
источник c:\papka1\file1.xls
то куда надо c:\papka2\
соответственно внутри папок много файлов.

Iska
02-10-2013, 18:08
astronomares, я лично — пас. Не дорос до понимания.

El Sanchez
02-10-2013, 21:17
Echo:N|XCopy /ih "%Source%\*.*" "%Output%" 1>nul »
astronomares, этот вариант не годится, поспешил я. Вот другой:

@Echo Off
SetLocal
Set Source=C:\Source
Set Output=C:\Output

XCopy /lueihy "%Source%\*.*" "%Output%"|Find ":\" 1>"%TEMP%\~tmp" 2>nul
XCopy /eihy /exclude:%TEMP%\~tmp "%Source%\*.*" "%Output%" 2>nul
Del /F /Q "%TEMP%\~tmp" 2>nul

astronomares
03-10-2013, 08:34
XCopy /lueihy "%Source%\*.*" "%Output%"|Find ":\" 1>"%TEMP%\~tmp" 2>nul
XCopy /eihy /exclude:%TEMP%\~tmp "%Source%\*.*" "%Output%" 2>nul
Del /F /Q "%TEMP%\~tmp" 2>nul »


вы предлагаете здесь, насколько я понял, скопировать из 2ой папки в темп. потом скопировать из источника во 2ую. и из темпа восстановить в старые файлы. да?

El Sanchez
03-10-2013, 09:06
astronomares, нет, первая строка с xcopy ничего не копирует, она делает список полных путей файлов, уже существующих в целевом каталоге. Список перенаправляется во временный файл. Этот файл - маска для последующего вызова xcopy (с параметром /exlude) уже с реальным копированием.

astronomares
03-10-2013, 10:03
попробовал пишет скопировано 0 файлов еще при создании списка в конечном итоге тоде пусто

El Sanchez
03-10-2013, 17:20
попробовал пишет скопировано 0 файлов еще при создании списка в конечном итоге тоде пусто »
astronomares, ладно, а так?

@Echo Off
SetLocal
Set Source=C:\Source
Set Output=C:\Output

XCopy /leuihy "%Source%\*.*" "%Output%"|Find ":\" 1>"%WINDIR%\Temp\~tmp" 2>nul
XCopy /eihfy /exclude:%WINDIR%\Temp\~tmp "%Source%\*.*" "%Output%" 2>nul
Del /F /Q "%WINDIR%\Temp\~tmp" 2>nul

astronomares
09-10-2013, 08:52
помогли мне на работе. получился вот такой батник.

XCOPY /C /Y /S source output
attrib output +R /S /D

source - папка источник
output - папка результат
сначала копируем файлы в папку 2
потом добавляет атрибут ко всем файлам только на чтение и в следующий раз при отработке скрипта он не может поменять уже существующие файлы. и копирует только новые.




© OSzone.net 2001-2012