beyond-compare 命令行工具
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 命令行工具相关推荐
- Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...
- ATS中的命令行工具解读
下面是几个常用命令行工具,先截图,再描述 在生成环境调试的命令 sudo gdb ./traffic_server -p $(pidof traffic_server) -batch -x [m ...
- 在vc6控制台程序中如何调用运行ImageMagick命令行工具
在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...
- 如何运行ImageMagick的命令行工具
在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...
- 构建现代化的命令行工具
文章源于 lambdas.dev 每当我们想要创建一个基于 NodeJS 的命令行工具时,就会衍生出一堆问题需要解决,比如如何准备开发环境,如何打包转译代码,如何使代码在转译后保持可调用的状态同时尽可 ...
- WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他.View ...
- 懒人神器 !一个创意十足的 Python 命令行工具
作者 | 写代码的明哥 来源 | Python编程时光 当听到某些人说 xx 库非常好用的时候,我们总是忍不住想要去亲自试试. 有一些库,之所以好用,是对一些库做了更高级的封闭,你装了这个库,就会附带 ...
- GitHub日收12000星,微软新命令行工具引爆程序员圈!
作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 继上次微软开源计算器刷爆GitHub后,今天凌晨在微软Build大会登场的Windows Terminal,如旋风般目前已登顶GitHu ...
- 一天1300 Star量,GitHub上新官方命令行工具
机器之心 机器之心编辑部 不想用命令行操作 GitHub 的开发者,不是好的开发者. Git简介 小编私以为,Git 是世界上最好的代码版本控制工具,木有之一.在做项目的时候,通常我们会在本地写代码, ...
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...
虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...
最新文章
- Linux-gate.so.1的含义[ZZ]
- mybatis一对多关联查询_一对一,一对多,多对多查询及延迟加载(N+1问题)分析
- android 兼容性定义,谷歌释出 Android 7.0 兼容性定义文件,史上最严
- centos7将网卡名字改成eth样式
- 【组件】大数据框架安装功能来划分
- 走进我的交易室08_有条理的交易者
- 《团队-科学计算器-模块开发过程》
- 测试是个艺术活儿:测试需求分工原则
- Spring 与 SpringMVC 容器父子关系引出的相应问题
- 孙鑫VC学习笔记:第十一讲 (四) 图形重绘方法三 利用兼容DC
- java jdbc 链接pg_使用PostgreSQL JDBC连接池
- hgoi#20190517
- 服务器PCI插槽上的固态硬盘,固态硬盘常见接口图解
- android killer java_Android反编译工具的使用-Android Killer
- 2016秋招面经(蘑菇街+BT+网易杭研+CVTE+唯品会)
- qq空间显示手机型号android,qq发表说说怎么显示手机型号?手机QQ空间如何自定义手机型号?...
- spotify mp3_为什么Spotify有那么多怪异的通用艺术家,例如白噪声婴儿睡眠
- FANUC机器人动作指令的定位类型FINE和CNT详解
- 使用shell脚本监控程序的运行和停止
- 【Python】数据类型 Number数字、String字符串、List列表、Tuple元组、Set集合、Dictionary字典
热门文章
- 抽象工厂模式---游戏等级
- 诗歌《船》 ---白桦 勉励自己
- BufferedImage类、Image类、Graphics类
- 内网穿透神器frp之进阶配置——stcp及p2p模式
- DeepinXP Lite 完美精简版 |5.2|5.3|5.4|5.5|5.6|5.7|5.8|5.9|5.10||6.1New| 迅雷下载
- 微软拼音 快捷输入 自定义格式的时间和日期
- 《Two-Archive Evolutionary Algorithm for Constrained Multiobjective Optimization》阅读笔记
- APICloud手机端网站直接制作手机APP
- android模拟器如何增加RAM
- 怎么把flv格式转成mp4?