使用批次檔簡化比對檔案的檔名輸入

今天有個比對特定檔案內容的需求,兩個不同的資料夾、相同的目錄結構與檔名,要比對的檔案分別放在不同的資料夾裡,例如:

  • XML檔在 web\xml
  • JS 檔在 web\js
  • CSS檔在 web\css

使用WinMerge來比對,範例如下:

start "winmerge" "c:\Program files (x86)\Winmerge\winmergeu.exe" /f "Exclude Source Control" c:\proj1\web\xml\AA.xml c:\proj2\web\xml\AA.xml
start "winmerge" "c:\Program files (x86)\Winmerge\winmergeu.exe" /f "Exclude Source Control" c:\proj1\web\js\BB.js c:\proj2\web\js\BB.js
start "winmerge" "c:\Program files (x86)\Winmerge\winmergeu.exe" /f "Exclude Source Control" c:\proj1\web\css\CC.css c:\proj2\web\css\CC.css

為了節省輸入檔名的時間想建立批次檔來使用,只傳入要比對的檔名而能各自判斷檔案所在的資料夾,搜尋到的最簡單解法是用環境變數的字串操作來判斷(參考來源:Find out whether an environment variable contains a substring)。下列批次檔唯一的技巧是「~-4」字串操作,取環境變數最後4個子字串來比對,如果是".xml"則比對web\xml裡的檔案,以此類推:

▼ 比對用的批次檔,命令為cmpf.bat

rem FN存放傳入的第一個參數,即要比對的檔名
@echo off
set FN=%1
if "%FN:~-4%"==".xml" goto XML
if "%FN:~-4%"==".css" goto CSS
if "%FN:~-3%"==".js" goto JS
goto END

:XML
  set DIR=xml
  goto WINMERGE

:CSS
  set DIR=css
  goto WINMERGE

:JS
  set DIR=js
  goto WINMERGE

:WINMERGE
  set FN1=c:\proj1\%DIR%\%1
  set FN2=c:\proj2\%DIR%\%1
  rem echo TEST: %FN1% %FN2%
  start "winmerge" "C:\Program files (x86)\Winmerge\winmergeu.exe" /f "Exclude Source Control" %FN1% %FN2%
:END

▼ 執行範例

cmpf AA.xml
cmpf BB.js
cmpf CC.css

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

2 個回應

  1. Eric表示:

    推薦超級好用的專業 (目錄內容比對) / (檔案內容比對) 工具:Beyound Compare

    http://www.scootersoftware.com/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *