beyond compare 命令行对比文件,目录

1. 文件对比

命令

"D:\Software\beyond compare\Beyond Compare\BCompare.exe" /slient @text_file.txt a.txt b.txt my_report.html

bat脚本

fileScript = `log verbose append:"%s"
text-report layout:side-by-side &options:ignore-unimportant &output-to:%s output-options:html-color %s`

2. 文件夹对比

命令

"D:\Software\beyond compare\Beyond Compare\BCompare.exe" /slient @folder.txt "D:\GitCode\CloudSOC01" "D:\GitCode\CloudSOC02" my_report_folder.html

bat脚本

folderScript = `log verbose append:"%s"
criteria rules-based
# sfilter "*.pas;*.dfm;*.dpr;*.inc;-archive\"
load %s
expand all
folder-report layout:side-by-side &options:display-mismatches,column-attributes,column-timestamp,column-size,include-file-links&output-to:%s output-options:html-color,wrap-word`

golang 代码片段

const (LoggerFileName = "server.log"DateTimeFormat = "2006-01-02 15:04:05"DateFormat     = "2006-01-02"BCFilesDir     = "BcFiles"BCImagesDir    = "BcImages"BCReprot       = "report.html"ZIPReport      = "report.zip"CycleTime      = 60TaskCount      = 10
)
func writeScript(count int) string {var script string// if stype == CompareType["file"] {//     script = fmt.Sprintf(fileScript, bcc.LogPath, "%3", "%1 %2")// } else if stype == CompareType["folder"] {script = fmt.Sprintf(folderScript, bcc.LogPath, "%1 %2", "%3")// }tempFile, err := ioutil.TempFile(os.TempDir(), "")if err != nil {logger().Errorf("Cannot create temporary file, error:[%s]", err)// 上报错误return ""}defer func() {if err := tempFile.Close(); err != nil {logger().Errorf("close tempfile error, filename:[%s], error:[%s]", tempFile.Name(), err)}}()if _, err = tempFile.Write([]byte(script)); err != nil {logger().Errorf("Failed to write to temporary file, filePath:[%s], context:[%s], error:[%s]", tempFile.Name(), script, err)// 上报错误return ""}return tempFile.Name()
}// Compare compare file or folder
func Compare(taskID, report, key string, packages, versions []string) bool {var err errorvar workDir stringignore := []string{}files := []string{}dirList := []os.FileInfo{}args := []string{"/slient"}var cmder *exec.CmdscriptPath := writeScript(2)if scriptPath == "" {logger().Errorf("write script failure, task_id:[%s]", taskID)goto ErrotExit}workDir, err = ioutil.TempDir(os.TempDir(), "")if err != nil {logger().Errorf("Cannot create temporary dir, task_id:[%s], error:[%s]", taskID, err)goto ErrotExit}files = download(workDir, key, packages)if files == nil {logger().Errorf("download file error, task_id:[%s]", taskID)goto ErrotExit}dirList, err = ioutil.ReadDir(workDir)if err != nil {logger().Errorf("read dir error, dir:[%s], task_id:[%s], error:[%s]", taskID, workDir, err)goto ErrotExit} else {for _, v := range dirList {ignore = append(ignore, v.Name())}}args = append(args, fmt.Sprintf("@%s", scriptPath))args = append(args, files...) // dir1, dir2args = append(args, conf.BCReprot) // "report.html"cmder = exec.Command(executor, args...)cmder.Dir = workDirlogger().Infof("run task, task_id:[%s], workDir:[%s], cmd:%s", taskID, workDir, cmder.Args)err = cmder.Run()if err != nil {logger().Errorf("run command error, task_id:[%s], error:[%s]", taskID, err)goto ErrotExit} else {replace := map[string]string{files[0]: versions[0],files[1]: versions[1],}ignore = append(ignore, conf.ZIPReport)zipPath := filepath.Join(workDir, conf.ZIPReport)dstFile, err := os.Create(zipPath)defer dstFile.Close()if err != nil {logger().Errorf("create zipfile error, path:[%s], error:[%s]", zipPath, err)goto ErrotExit}if ZipFile(workDir, dstFile, ignore) != nil {logger().Errorf("write zipfile error, path:[%s], error:[%s]", zipPath, err)goto ErrotExit}currOffset, _ := dstFile.Seek(0, 2)dstFile.Seek(0, 0)buf := make([]byte, currOffset, currOffset)if _, err = dstFile.Read(buf); err != nil {logger().Errorf("read zip buf error, error:[%s]", err.Error())goto ErrotExit}if !upload(report, buf) {logger().Errorf("upload report error, task_id:[%s]", taskID)goto ErrotExit}}goto SuccessExitErrotExit:return false
SuccessExit:return true
}

beyond-compare 命令行工具相关推荐

  1. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  2. ATS中的命令行工具解读

    下面是几个常用命令行工具,先截图,再描述 在生成环境调试的命令 sudo gdb ./traffic_server -p $(pidof traffic_server)  -batch  -x  [m ...

  3. 在vc6控制台程序中如何调用运行ImageMagick命令行工具

    在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...

  4. 如何运行ImageMagick的命令行工具

    在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...

  5. 构建现代化的命令行工具

    文章源于 lambdas.dev 每当我们想要创建一个基于 NodeJS 的命令行工具时,就会衍生出一堆问题需要解决,比如如何准备开发环境,如何打包转译代码,如何使代码在转译后保持可调用的状态同时尽可 ...

  6. WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)

    Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他.View ...

  7. 懒人神器 !一个创意十足的 Python 命令行工具

    作者 | 写代码的明哥 来源 | Python编程时光 当听到某些人说 xx 库非常好用的时候,我们总是忍不住想要去亲自试试. 有一些库,之所以好用,是对一些库做了更高级的封闭,你装了这个库,就会附带 ...

  8. GitHub日收12000星,微软新命令行工具引爆程序员圈!

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 继上次微软开源计算器刷爆GitHub后,今天凌晨在微软Build大会登场的Windows Terminal,如旋风般目前已登顶GitHu ...

  9. 一天1300 Star量,GitHub上新官方命令行工具

    机器之心 机器之心编辑部 不想用命令行操作 GitHub 的开发者,不是好的开发者. Git简介 小编私以为,Git 是世界上最好的代码版本控制工具,木有之一.在做项目的时候,通常我们会在本地写代码, ...

  10. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...

    虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...

最新文章

  1. Linux-gate.so.1的含义[ZZ]
  2. mybatis一对多关联查询_一对一,一对多,多对多查询及延迟加载(N+1问题)分析
  3. android 兼容性定义,谷歌释出 Android 7.0 兼容性定义文件,史上最严
  4. centos7将网卡名字改成eth样式
  5. 【组件】大数据框架安装功能来划分
  6. 走进我的交易室08_有条理的交易者
  7. 《团队-科学计算器-模块开发过程》
  8. 测试是个艺术活儿:测试需求分工原则
  9. Spring 与 SpringMVC 容器父子关系引出的相应问题
  10. 孙鑫VC学习笔记:第十一讲 (四) 图形重绘方法三 利用兼容DC
  11. java jdbc 链接pg_使用PostgreSQL JDBC连接池
  12. hgoi#20190517
  13. 服务器PCI插槽上的固态硬盘,固态硬盘常见接口图解
  14. android killer java_Android反编译工具的使用-Android Killer
  15. 2016秋招面经(蘑菇街+BT+网易杭研+CVTE+唯品会)
  16. qq空间显示手机型号android,qq发表说说怎么显示手机型号?手机QQ空间如何自定义手机型号?...
  17. spotify mp3_为什么Spotify有那么多怪异的通用艺术家,例如白噪声婴儿睡眠
  18. FANUC机器人动作指令的定位类型FINE和CNT详解
  19. 使用shell脚本监控程序的运行和停止
  20. 【Python】数据类型 Number数字、String字符串、List列表、Tuple元组、Set集合、Dictionary字典

热门文章

  1. 抽象工厂模式---游戏等级
  2. 诗歌《船》 ---白桦 勉励自己
  3. BufferedImage类、Image类、Graphics类
  4. 内网穿透神器frp之进阶配置——stcp及p2p模式
  5. DeepinXP Lite 完美精简版 |5.2|5.3|5.4|5.5|5.6|5.7|5.8|5.9|5.10||6.1New| 迅雷下载
  6. 微软拼音 快捷输入 自定义格式的时间和日期
  7. 《Two-Archive Evolutionary Algorithm for Constrained Multiobjective Optimization》阅读笔记
  8. APICloud手机端网站直接制作手机APP
  9. android模拟器如何增加RAM
  10. 怎么把flv格式转成mp4?