Я решил эту проблему путем контакта с Google, и они помогли мне решающий проблему.
Именно так я понимаю, у Вас есть единственный источник с несколькими идентичными местами назначения. Вы вносите изменения в своем источнике (создания, обновления, удаления) и хотите легко сделать свои места назначения идентичными источнику со всеми теми изменениями?
Затем это - то, в чем Вы нуждаетесь:
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 произвести файлы и папки, которые изменяются. Это производит простой вывод, который перечисляет число и размер измененных файлов. Если Вы хотели бы журнал того, что синхронизировалось, исключите эти переключатели.
Однако, если у Вас будут какие-либо настройки, настроенные на Ваших местах назначения, то они будут удалены.
Я не думаю, что Вы ищете, исходно возможно с 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
Это даст Вам файл, содержащий вывод как это:
*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), который содержит новые и измененные файлы, а также пакетный файл, который имеет команды копии для тех новых и измененных файлов, и удаляют команды для удаленных файлов.
Гм, robocopy
сохраняет конфигурацию задания копии в файл, который можно вспомнить позже с параметром. Это достаточно по Вашему определению сценария? Это было загрузкой в XP/2003 и установило по умолчанию в Vista/7/2008 вариантах. Существует также RichCopy
, наложение GUI к вышеупомянутому robocopy. Это могло бы даже произвести файл задания, таким образом, можно выполнить robocopy в сценарии позже.
Испытайте Microsoft Synctoy. Это не генерирует сценарии, но это scriptable. Если Вы хотите пользовательский сценарий, необходимо будет, вероятно, записать собственное. Эти парни были удивительными, когда я сначала начинал изучать сценарии Windows.