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      = 60
	TaskCount      = 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 error
	var workDir string
	ignore := []string{}
	files := []string{}
	dirList := []os.FileInfo{}
	args := []string{"/slient"}
	var cmder *exec.Cmd

	scriptPath := 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, dir2
	args = append(args, conf.BCReprot) // "report.html"

	cmder = exec.Command(executor, args...)
	cmder.Dir = workDir
	logger().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 SuccessExit

ErrotExit:
	return false
SuccessExit:
	return true
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值