Что нового

[Файловая система] Синхронизация файла в разных папках на одном ПК

xzspb

Новичок
Сообщения
7
Репутация
0
Версия AutoIt: 3.3.8.1

Описание:
Здравствуйте, стоит достаточно простая задача, с который я ,к сожалению, не имея опыта в программировании не могу справиться.
Нужно синхронизировать при запуске компьютера некоторый файл, который находится в разных папках.
Синхронизация - по времени изменения файла. То есть если дата изменения файла различается - скопировать более новый файл и заменить им устаревший.

Например два файла C:\Program Files\First\sync.xml и C:\Program Files\Second\sync.xml
Скрипт в автозагрузке, при запуске ПК смотрим дату изменения файлов. Для 1ого файла 1 января 2012г 10-00-00 для второго 2 января 2012г 11-00
Значит копируем второй файл и заменяем им первый. Или же наоборот.
Если дата не различается ничего не делаем.

Заранее спасибо! :beer:

Примечание:
А так же как бонус буду очень рад если будут писаться логи после каждой синхронизации.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
xzspb
Такой вариант:

Код:
; НАЧАЛО

 $FIRST=@ScriptDir&'\1.txt'
 $SECOND=@ScriptDir&'\2.txt'
 $LOG=@ScriptDir&'\copy.log'

 $OPEN=FileOpen($LOG,1)

 $MOMENT=@YEAR&'-'&@MON&'-'&@MDAY&'-'&@HOUR&'-'&@MIN&'-'&@SEC

 If FileGetTime($FIRST,0,1)>FileGetTime($SECOND,0,1) Then
  $R=FileCopy($FIRST,$SECOND,1)
  If $R=0 Then
   FileWriteLine($LOG,&': ошибка замены '&$SECOND&' на '&$FIRST)
  Else
   FileWriteLine($LOG,$MOMENT&': '&$SECOND&' заменён на '&$FIRST)
  EndIf
 ElseIf FileGetTime($FIRST,0,1)<FileGetTime($SECOND,0,1) Then
  $R=FileCopy($SECOND,$FIRST,1)
  If $R=0 Then
   FileWriteLine($LOG,$MOMENT&': ошибка замены '&$FIRST&' на '&$SECOND)
  Else
   FileWriteLine($LOG,$MOMENT&': '&$FIRST&' заменён на '&$SECOND)
  EndIf
 Else
  FileWriteLine($LOG,$MOMENT&': нет замены')
 EndIf

 FileClose($OPEN)

; КОНЕЦ
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Эх....
http://autoit-script.ru/index.php/topic,8150.0.html
 
Автор
X

xzspb

Новичок
Сообщения
7
Репутация
0
snoitaleR , Спасибо огромное! :IL_AutoIt_1:
Несколько вопросов :

Код:
$FIRST=@ScriptDir&'\1.txt'
; Я сделал как
$FIRST="C:\1.txt"
; Можно как то указывать через @ ?


FileGetTime 0 и 1 это две опции? Если да, то зачем нам CreateTIme, ведь как только создаешь файл CreateTime=ModifiedTime?

Можно ли писать файл в сеть \\ip\folder\file ?
Или стянуть файлик из сети?

В переменной Moment - текущее время с ПК?

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


Еще я что-то не понял как цитировать на форуме) :stars:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
xzspb [?]
Можно как то указывать через @ ?
Код:
@HomeDrive & \'1.txt'

подробнее: смотри справку по макросам

Можно ли писать файл в сеть \\ip\folder\file ?Или стянуть файлик из сети?

вот пример из собственной локалки. естественно должны быть права на запись
Код:
$FIRST='\\Servak\common\1.txt'
 $SECOND='\\Servak\common\2.txt'
 $LOG=@ScriptDir&'\copy.log'


Еще я что-то не понял как цитировать на форуме)
выделяешь текст и появляется кнопка "цитировать" :smile:
 
Верх