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
}