有一个文件夹/文件同步工具,可以生成一个同步脚本

我正在寻找一个工具,可以通过生成一个脚本,然后可以从命令行运行,并生成的脚本不需要工具来安装工作同步文件夹。

像它可以比较目录,然后脚本复制/删除操作,并允许您保存该脚本,并从任何计算机运行脚本。

另外我正在工作的Windows世界。 我已经看过不less同步工具,但目前为止我没有看到任何工具会生成脚本。

任何意见将不胜感激!

编辑:我有的情况是我们有几个网站具有相同的核心代码库。 当这个核心代码库更新新的新文件,更改文件删除文件。

我想创build一个脚本,可以打包与新的和更改的文件,将复制它们,并删除不再需要的文件。 sorting一个非常简单的更新程序。 目前我用winmerge做这个,我把修改后的和新的文件放在一个档案里,我复制丢失的项目的名字,然后手写这个脚本。

由于软件包将只包含新的和已更改的文件,因此脚本必须记住哪些文件需要删除,因为当我们运行脚本时,它不应该连接回原来的源代码来查找删除的文件。 目前我手写剧本,很乏味。 我只是希望一些文件同步工具能够打包更新完成更改文件和删除,似乎这将是一个很好的function。

就这样,我明白,你有一个单一的来源,有多个相同的目的地。 您正在对源代码进行更改(创build,更新,删除),并希望通过所有这些更改轻松使目标与源代码保持一致?

那么这就是你所需要的:

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开关将使您的目的地与您的来源相同,包括您的删除操作。 / NFL和/ NDL停止robocopy输出正在更改的文件和文件夹。 这会产生一个简单的输出,列出更改文件的数量和大小。 如果您想要同步内容的日志,请排除这些开关。

但是,如果您在目的地上设置了任何自定义项,那么这些自定义项将被移除。

更新以下克里斯的第一个评论这个答案

我不认为你想要的是使用robocopy或者其他的命令行工具。

但是,这里有一些伪代码可以做你想要的东西,我想。 实际的脚本超出了我的技能,没有太多的研究,但这是您需要的工作stream程:

 $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 =日志文件中列出的完整path
  • / 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),以及对这些新文件和已更改文件具有复制命令的batch file,以及删除已删除文件的命令。

那么, robocopy将复制作业的configuration保存到一个文件中,稍后您可以通过参数调用该文件。 脚本的定义是否足够了? 这是在XP / 2003下载,默认安装在Vista / 7/2008版本中。 还有RichCopy ,一个GUI覆盖到上述的robocopy。 它甚至可能输出作业文件,以便稍后可以在脚本中运行robocopy。

试用微软Synctoy 。 它不会生成脚本,但它是可编写脚本的。 如果你想要一个自定义的脚本,你可能必须写自己的脚本。 当我第一次开始学习Windows脚本时, 这些人真棒。