Ek is op soek na 'n instrument wat dopgehou kan sinchroniseer deur 'n skrip te genereer wat dan vanaf 'n opdragreël uitgevoer kan word, en die skrip wat gegenereer word, vereis nie dat die instrument geïnstalleer moet word om te werk nie.

Soos dit gidse kan vergelyk, skryf dan die kopieer/verwyder-operasies, en laat jou toe om die skrif te stoor en die skrif vanaf enige rekenaar te laat loop.

Ek werk ook windows world. Ek het na 'n hele paar sinchronisasie-instrumente gekyk, maar nie een wat ek tot dusver gesien het, sal skrifte genereer nie.

Enige raad sal baie waardeer word!

EDIT: Die situasie wat ek het, is dat ons verskeie webwerwe met dieselfde kernkodebasis het. Wanneer hierdie kernkodebasis opgedateer word nuwe nuwe lêers, veranderde lêers verwyder lêers.

Ek wil graag 'n skrip skep wat saam met die nuwe en veranderde lêers verpak kan word wat dit sal kopieer, en die lêers wat nie meer nodig is nie, uitvee. Soort van 'n baie eenvoudige opdateringsprogram. Tans doen ek dit met winmerge, ek plaas die veranderde en nuwe lêers in 'n argief, en ek kopieer die name van die ontbrekende items en skryf die skrif met die hand.

Aangesien die pakket slegs die nuwe en veranderde lêers sal bevat, moet die skrip onthou watter lêers uitgevee moet word, want wanneer ons die skrip hardloop, hoef dit nie terug te koppel aan die oorspronklike bron om die geskrapte lêers te bepaal nie. Tans skryf ek die draaiboek met die hand, en dit is vervelig. Ek het net gehoop dat een of ander lêersinkroniseringsinstrument die vermoë het om 'n opdatering te verpak met veranderde lêers en verwyderings, dit lyk of dit 'n lekker funksie sou wees.

answer

Net sodat ek verstaan, jy het 'n enkele bron, met verskeie identiese bestemmings. Jy maak veranderinge by jou bron (skeppings, opdaterings, skrappings) en wil jou bestemmings maklik identies aan die bron maak met al daardie veranderinge?

Dan is dit wat jy nodig het:

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

Die /MIR-skakelaar sal jou bestemmings identies maak aan jou bron, insluitend jou uitvee-aksies. Die /NFL en /NDL stop robocopy om die lêers en vouers wat verander, uit te voer. Dit lewer 'n eenvoudige uitset wat die aantal en grootte van lêers wat verander is, lys. As jy 'n logboek wil hê van wat gesinkroniseer is, sluit hierdie skakelaars uit.

As jy egter enige aanpassings op jou bestemmings opgestel het, sal dit verwyder word.

Opdatering na Chris se eerste opmerking oor hierdie antwoord

Ek dink nie waarna u soek, is natuurlik moontlik met robocopy of ander opdragreëlnutsgoed nie.

Hier is egter 'n paar psuedo-kode wat sal doen waarna jy soek, dink ek. Die werklike draaiboek is buite my vaardighede sonder baie navorsing, maar dit is die werkvloei wat jy nodig het:

$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 = Volledige pad gelys in die loglêer
  • /NS = Geen grootte gelys in die loglêer nie
  • /NJH en /NJS = geen taakopskrif en opsomming in die loglêer nie
  • /L = Lys net wat sou gebeur, moenie eintlik enige veranderinge aanbring nie

Dit sal vir jou 'n lêer gee wat uitvoer soos volg bevat:

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

Dan sal dit moet loop:


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
}

Aan die einde hiervan het jy 'n vouer (jou $packagesource) wat nuwe en veranderde lêers bevat, sowel as 'n bondellêer wat kopie-opdragte vir daardie nuwe en veranderde lêers het, en verwyder opdragte vir die verwyderde lêers.

Um, robocopystoor die konfigurasie van 'n kopieertaak na 'n lêer wat jy later met 'n parameter kan herroep. Is dit voldoende volgens jou definisie van skrif? Dit was 'n aflaai in XP/2003, en by verstek geïnstalleer in Vista/7/2008 variante. Daar is ook ' RichCopyn GUI-oorleg vir die bogenoemde robocopy. Dit kan selfs die werklêer uitvoer sodat jy later robocopy in 'n skrip kan laat loop.

Probeer die Microsoft Synctoy . Dit genereer nie skrifte nie, maar dit is scriptable. As jy 'n pasgemaakte skrif wil hê, sal jy waarskynlik jou eie moet skryf. Hierdie ouens was fantasties toe ek die eerste keer begin het om Windows-skrip te leer.