為了給 Jenkin 整合出版流程鋪路, 先來找看看有沒有好用的比對工具 (也要能支援 command line): Beyond Compare.
主要是使用 Beyond Compare 的檔案/資料夾比對功能, 再從來源目錄更新到目標目錄下.
左邊來源目錄下紅色的檔案代表有修改過, 與右邊檔案不同. 選取要更新的檔案後, 選擇上方工具列 “Copy" > 選擇 Left side > Start. 將左方差異檔覆蓋至右方.


執行後下方印出 Copy 結果: 修改 1 個檔案.
操作很容易上手, 接下來就是怎麼使用 Beyond compare 提供的 command line 並整合到 window 批次檔建立流程.
Beyond Compare 安裝後並不會把執行檔加入環境變數, 請先手動添加到環境變數 (其實只是為了方便呼叫).
執行檔提供簡單的比對功能: 文件/資料夾, 還有執行比對語法(透過 Script)

由於比對資料夾 BCompare.exe “C:\Left Folder" “C:\Right Folder" 會跳出視窗, 這邊就不考慮了… 既然要整合自動化建置流程, 要盡可能減少使用者互動.
BCompare.exe “@C:\My Script.txt" 可以把操作語法都寫在 txt 檔裡, 依次執行 (沒辦法 flow control, 不能下註解). 參考一下 Scripting Reference.
基本會用到的語法就是: log, load, sync
Log
log [none|normal|verbose] [[append:]<filename>]
控制 log 儲存內容詳細程度, 儲存方式(是否覆蓋), 以及 log 名稱 (預設 “Log.txt")
Load
load [create:(all|left|right)] <left path> [<right path>]
載入 session 用於比對, 指定左右路徑.
Sync
sync [visible] [create-empty] (update|mirror):(left->right|right->left|all)
同步資料夾內容, 同步方式包含 copy, delete.
[visible] 可選擇是否忽略隱藏檔案;
[create-empty] 會包含創建子目錄;
update 只會複製較新的修改檔案, 並不會刪除;
mirror 則包含增減修改;
all 則是左右雙向 update or mirror.
範例:
- 將左方異動檔案 (包含刪除) 更新至右方
log verbose log.txt
load C:\Users\USER\Desktop\f1 C:\Users\USER\Desktop\f2
sync create-empty mirror:left->right
2. 承1, 只篩選 txt 檔
log verbose log.txt
filter “*.txt"
load C:\Users\USER\Desktop\f1 C:\Users\USER\Desktop\f2
sync create-empty mirror:left->right
將 Script 存到 txt 檔執行:

另外, 也可以像 batch 傳入參數到 script: 用 %1 %2, … 接起來. 範例2 就會變成:
log verbose %1
filter “*.txt"
load %2 %3
sync create-empty mirror:left->right
呼叫時將參數接在後面, 以空格區隔. 加上參數是為了方便同個 script 多個用途, 整合流程時能重複使用.
BCompare.exe “@C:\My Script.txt" “log.txt" “C:\Users\USER\Desktop\f1″ “C:\Users\USER\Desktop\f2″
總結
透過 Beyond Compare 工具可以省略很多 batch 語法操作 (Linux 平台也許有更好的也說不定!?), 尤其是有大量的檔案需要比對的話, 能做到自動化是最好. Beyond Compare 工具操作介紹就到這~ 後續有看到好用的方法也會放上來分享.