| Document Path: | Home Page / Command Tools / SyncScan / Sample - Sync Directories |   |
This program compares directory A with directory B. If a file in A is more recent, copy it to B.
Required Command Line Arguments:
//Argument 1 - directory A
var dira=app.argv(0);
var fo=app.FindFile(dira);
while(fo.Valid? !fo.AttributeDirectory : true)
{
dira=app.Input("Enter directory A: ");
if(!dira) // If use just strikes enter, we quit.
{
app.Exit(-1);
}
fo=app.FindFile(dira);
}
//Argument 2 - directory B
var dirb=app.argv(1);
fo=app.FindFile(dirb);
while(fo.Valid? !fo.AttributeDirectory : true)
{
dirb=app.Input("Enter directory B: ");
if(!dirb) // If use just strikes enter, we quit.
{
app.Exit(-1);
}
fo=app.FindFile(dirb);
}
//Argument 3 - Sub-directories?
var yesno=app.argv(2).toLowerCase();
if(yesno!='y' && yesno!='n')
{
app.Print("Scan sub-directories? (y/n)\n");
while(yesno!='y' && yesno!='n')
{
yesno=app.getch(false).toLowerCase();
}
}
subdir=(yesno=='y'? true:false);
//Variables used by the callback function:
var updateFileCount=0;
var updateDirCount=0;
var totalFileCount=0;
//We have all the required arguments now
//Prompt the user to press any key to continue. This gives the user a chance to terminate the program by Ctrl+C
app.Print("\nSync " + dira + " with " + dirb + (subdir? ", including sub-directories." : ".") + "\n");
app.Print("Press any key to continue....\n");
app.getch();
app.CompareDirectory(dira, dirb, subdir, SyncCallback);
function SyncCallback(dirFlag, fo1, fo2)
{
switch(dirFlag)
{
case 2:
app.Print("Start sync \n");
fo2.Property("Copy file count")=0;
break;
case -2:
app.Print("\nSync Finished.\n");
app.Print(updateFileCount+" files updated.\n");
app.Print(updateDirCount+" directories updated.\n");
break;
case 0:
//If fo2 does not exist or is older, update it with fo1
if(fo2.Valid? fo1.LastWriteTime.Compare(fo2.LastWriteTime)>0 : true)
{
var count=fo2.Parent.Property("Copy file count")+1;
fo2.Parent.Property("Copy file count")=count;
totalFileCount++;
app.Print(count + "(" + totalFileCount + "): Copy " + fo1.FullPath + " to " + fo2.FullPath + "\n");
fo1.CopyFile(fo2.FullPath);
updateFileCount++;
}
break;
case 1:
//We enter a sub-directory.
app.Print("Begin of scanning sub-directory "+fo1.FullPath+"\n");
if(!fo2.Valid)
{
//If fo2 does not exist, create it.
fo2.CreateDirectory();
fo2.Property("LW")=fo1.LastWriteTime;
fo2.Property("NewDir")=true;
}
else
{
fo2.Property("LW")=fo2.LastWriteTime;
fo2.Property("NewDir")=false;
}
fo2.Property("Copy file count")=0;
break;
case -1:
//We leave a sub-directory. Update its last-write time if necessary.
app.Print("End of scanning sub-directory"+fo1.FullPath+"\n");
if(fo2.Property("NewDir"))
{
fo2.LastWriteTime=fo1.LastWriteTime
updateDirCount++;
}
else
{
if(fo2.Property("Copy file count")>0)
{
var r=fo1.LastWriteTime.Compare(fo2.Property("LW"));
if(r>0)
{
fo2.LastWriteTime=fo1.LastWriteTime
updateDirCount++;
}
}
else
{
if(fo2.LastWriteTime.Compare(fo2.Property("LW"))!=0)
{
fo2.LastWriteTime=fo2.Property("LW");
updateDirCount++;
}
}
}
fo2.Property("LW")=null;
fo2.Property("NewDir")=null;
break;
}
if(app.kbhit())
{
var ch=app.getch(false);
if(ch==27)
{
app.Print("*** Abort ***\n");
return(-1);
}
}
}