Войти

Показать полную графическую версию : Условия для копирования.


tubxtru
10-06-2020, 02:49
Доброго времени суток. На самом деле я не смыслю в написании скриптов и поэтому прошу Вашей помощи.
Нужен скрипт который будет анализировать папку 1 и папку 2 (Папка 1 находится на одном компьютере, а папка 2 на другом. Компы в одной сети). Если в папке 1 нет данных, а в папке 2 есть данные, то из папки 2 начинается копирование файлов в папку 1 с последней датой изменения файла. (т.е. есть файлы 22.05 и 22.06 копирование файла произойдет 22.06). Если в папке 1 есть данные и в папке 2 есть данные, то начинается сверка файлов по дате, если в папке 1 старее файлы чем в папке 2, то файлы в папке 1 удаляются, после чего идет копирование файлов в папку 1 (опять же с последней датой изменения).

Не судите строго я еще зеленый.

DJ Mogarych
10-06-2020, 09:58
То есть, папка 1 должна быть точной копией папки 2?

Busla
10-06-2020, 11:14
tubxtru, вам лучше ПО для синхронизации какое-нибудь посмотреть.

lev0tsk
10-06-2020, 14:04
tubxtru

Просто средствами скриптов это, наверное, проблематично сделать...(((
Я для подобных задач (по сути, это односторонняя синхронизация папки 1 с папкой 2) использую nnbackup.exe от
nncron.
nnbackup.exe - command-line утилита, подключаем сетевой диск и CMD-шник типа такого (у меня такая строка параметров):

Set In=C:\papka-2
Set Out=U:\papka-1
Set NameLog="имя-лог-файла"

"C:\nnBackup\nnbackup.exe" sync -i %In% -o %Out% -tc -t2 -ad -s -v -e -delete-before -log C:\Temp\%NameLog%_%Date%.log

У утилиты довольно широкие возможности по резервному копированию и синхронизации, поэтому при адаптации утилиты под свои нужды лучше обратиться к её документации.

DJ Mogarych
10-06-2020, 21:27
nncron был хорош во времена Windows XP, сейчас в нём смысла никакого, да и польская нотация - это на большого любителя.
Для синхронизации и копирования очень хорошо подходит robocopy.

Синхронизировать папки 1 -> 2 можно так:
robocopy c:\1 c:\2 /MIR

greg zakharov
10-06-2020, 22:53
Просто средствами скриптов это, наверное, проблематично сделать...
Вы само очарование наивности. Если бы было четкое описание сути задачи, а также пояснение ее нюансов, вы бы давно получили заветный пирожок (стряхнули пыль и положили бы обратно на полочку). А так... так, пожалуй, следует прислушаться DJ Mogarych, robocopy вполне может послужить отправной точкой в решении вашей задачи.

tubxtru
11-06-2020, 01:19
Извините господа. Это я не правильно понял задачу. И не правильно ее изложил Вам.

На сервере каждый день формируется бэкап. Этот бэкап нужно перекинуть на 2 харда. Еще раз попробую выложить свое понимание ситуации: если на диске 1 и 2 нет бэкапа, то бэкап записывается на оба, если на диске 1 есть бэкап, а на диске 2 его нет то пишется на 2 диск. Т.е. бэкап на 1 диске остается старым. (как резервная копия) Если на диске 1 и 2 уже есть бэкапы, то определяется самый старый, а из предыдущего условия самый старый бэкап остался на диске 1, то происходит удаление старого бэкапа с диска 1 и начинается запись свежего. Т.е. теперь бэкап на диске 2 уже становится старым ну и аналогично дальше.

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

#---задаем имя машины и каталоги резервного копирования, каталог логирования, записываем время начала
$VMName ="1cs"
$log ="C:\Scripts\logs\" + $VMName+ ".log"
$data = Get-Date -Format "dddd MM/dd/yyyy HH:mm"
$VMName+" --- START --- "+$data >> $log
$txt1 = "\\pk1\F$\pk7\1sc.txt"
$txt2 = "\\pk2\R$\pk7\1sc.txt"
$istxt1 = Test-Path $txt1
$istxt2 = Test-Path $txt2
if ($istxt1 -eq "True" -and $istxt2 -ne "True")
#===================================
$BackupPath=$BackupDisk+$VMName
Get-ChildItem -Path $BackupPath -Include * | remove-Item -recurse
#---Проверяем наличие папки назначения, если нет, то создаем
if (!(Test-Path $BackupPath)){md $BackupPath}
$data = Get-Date -Format "dddd MM/dd/yyyy HH:mm"
$VMName+" --- FINISH --- "+$data >> $log

я не знаю может это чем поможет но это у меня как образец...

{
New-Item -Path "\\pk1\R$\pk7\" -name 1sc.txt -type "file"
$BackupDisk = "\\pk2\R$\pk7\"
Remove-Item -Path $txt1
}elseif ($istxt2 -eq "True" -and $istxt1 -ne "True")
{
New-Item -Path "\\pk1\F$\pk7\" -name 1sc.txt -type "file"
$BackupDisk = "\\pk2\F$\pk7\"
Remove-Item -Path $txt2
}elseif ($istxt2 -eq "True" -and $istxt1 -eq "True")
{
$file1 = Get-Item $txt1
$file2 = Get-Item $txt2

if ($file1.LastWriteTime -gt $file2.LastWriteTime)
{
$BackupDisk = "\\pk2\R$\pk7\"
Remove-Item -Path $txt1
}else
{
$BackupDisk = "\\pk1\F$\pk7\"
Remove-Item -Path $txt2
}
}elseif($istxt1 -ne "True" -and $istxt2 -ne "True"){
New-Item -Path "\\pk2\R$\pkr7\" -name 1sc.txt -type "file"
$BackupDisk = "\\pk2\R$\pkr7\"
}




© OSzone.net 2001-2012