Есть ли Инструмент Folder/File Syncronization, который может генерировать сценарий синхронизации

Я решил эту проблему путем контакта с Google, и они помогли мне решающий проблему.

2
задан 19 May 2011 в 20:13
3 ответа

Именно так я понимаю, у Вас есть единственный источник с несколькими идентичными местами назначения. Вы вносите изменения в своем источнике (создания, обновления, удаления) и хотите легко сделать свои места назначения идентичными источнику со всеми теми изменениями?

Затем это - то, в чем Вы нуждаетесь:

robocopy "\\sourcepath\folder" "\\destinationpath1\folder" /MIR /NFL /NDL
robocopy "\\sourcepath\folder" "\\destinationpath2\folder" /MIR /NFL /NDL
robocopy "\\sourcepath\folder" "\\destinationpath3\folder" /MIR /NFL /NDL

/ переключатель MIR сделает Ваши места назначения идентичными Вашему источнику, включая Ваши действия удаления. НФЛ / и/NDL мешают robocopy произвести файлы и папки, которые изменяются. Это производит простой вывод, который перечисляет число и размер измененных файлов. Если Вы хотели бы журнал того, что синхронизировалось, исключите эти переключатели.

Однако, если у Вас будут какие-либо настройки, настроенные на Ваших местах назначения, то они будут удалены.

Обновление после первого комментария Chris к этому ответу

Я не думаю, что Вы ищете, исходно возможно с robocopy или другими инструментами командной строки.

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

$codebase = "\\codebase\"
$comparesource = "\\destination to compare to codebase\"
$packagesource = "\\where you store update package files\"
$finaldestination = "\\path you're actually trying to update\"

robocopy $codebase $comparesource /MIR /LOG:c:\log.txt /FP /NS /NJH /NJS /L
  • /FP = Полный путь перечислен в файле журнала
  • /NS = Никакой размер не перечислен в файле журнала
  • /NJH и/NJS = никакой заголовок задания и сводка в файле журнала
  • /L = Просто перечислите то, что произошло бы, на самом деле не вносите изменения

Это даст Вам файл, содержащий вывод как это:

*EXTRA File          C:\file1.txt
       New File             c:\file2.xls
       Newer                c:\file3.txt

Затем это должно было бы работать:


If line contains "newer" or "New File" rest of line enters array $copyfilename
If line contains "*EXTRA" rest of line enters array $deletefilename
\\This would only work for a flat structure; subfolders complicate things and you'd need to grab the file name and subfolder name instead. 

for each in $copyfilename {
robocopy $codebase\$copyfilename $packagesource\$copyfilename /e

Append above line to $packagesource\updatepackage.bat, replacing $codebase with $packagesource and $packagesource with $finaldestination
}
for each in $deletefilename {
append "del $finaldestination\$deletefilename" to $packagesource\updatepackage.bat
}

В конце этого у Вас была бы папка (Ваш $packagesource), который содержит новые и измененные файлы, а также пакетный файл, который имеет команды копии для тех новых и измененных файлов, и удаляют команды для удаленных файлов.

1
ответ дан 3 December 2019 в 09:23

Гм, robocopy сохраняет конфигурацию задания копии в файл, который можно вспомнить позже с параметром. Это достаточно по Вашему определению сценария? Это было загрузкой в XP/2003 и установило по умолчанию в Vista/7/2008 вариантах. Существует также RichCopy, наложение GUI к вышеупомянутому robocopy. Это могло бы даже произвести файл задания, таким образом, можно выполнить robocopy в сценарии позже.

4
ответ дан 3 December 2019 в 09:23

Испытайте Microsoft Synctoy. Это не генерирует сценарии, но это scriptable. Если Вы хотите пользовательский сценарий, необходимо будет, вероятно, записать собственное. Эти парни были удивительными, когда я сначала начинал изучать сценарии Windows.

1
ответ дан 3 December 2019 в 09:23

Теги

Похожие вопросы