擴充彈性十足的檔案管理工具:Multi Commander
檔案管理員最多人使用的應該是Total Commander,我則是使用FreeCommander多年,FreeCommander提供的自訂命令是我常使用的功能之一,例如在選取檔案後用FastCopy來快速複製檔案。但最近的FreeCommander XE版本我在使用上卻有個嚴重問題:存取網路資料夾的速度經常突然變慢,有時需要等待十數秒、甚至數十秒才能再度操作,當我頻感不耐之際,剛好看到小眾軟件這篇Multi Commander – 快速进化、功能强大的文件管理器介紹Multi Commander,下載試用後為它的擴充功能大為驚豔,Multi Commander內建可撰寫腳本碼的MultiScript引擎,只要稍具JavaScript知識,就能依需求擴建功能。這會不會太方便了?或許原本需要撰寫程式才能處理的檔案操作,都能簡單的利用MultiScript就能完成。本文就針對Multi Commander的MultiScript部份做個簡單介紹。
建立新的自訂命令
要建立擴充的使用者自訂命令只要點擊功能表【Configuration】→【User Defined Commands】,按〔New〕就能新增命令,命令的類型有Internal Command、External、Custom Commands、Batch Script(.BAT)與Multi-Script五大類,選用Multi-Script後就能在右方的輸入框裡輸入腳本程式。
指定執行命令的方式
在Multi Commander裡我們必須以下列三種設定之一來指定如何執行自訂命令:
- Hotkey(熱鍵):指定按鍵給自訂命令,在【Hotkey】欄位裡按下按鍵後再按右方的〔Assign〕就可指定該按鍵執行自訂命令。如果按鍵已經被指定過則會出現衝突(Conflict)的錯誤訊息。
- Menu(自訂功能表):按Add Menu後點選自訂命令後再按〔--->〕將之加入功能表裡,新建的功能選項會變成功能表的最後一項。
- Alias(代名):給自訂命令一個代名,可以在功能表下方的【Address】分頁下方的命令輸入區輸入代名來執行。
MultiScript的撰寫要點
MultiScript其實很好寫,只要你寫過JavaScript或xxxScript,稍微閱讀語法說明應該很快就能上手。以下是我撰寫、測試後的幾個要點提示:
- MultiScript區分大小寫
- 變數宣告使用@var,變數名稱必須以 $ 開頭,只能使用a-z、A-Z、0-9等幾個符號
- 變數的宣告最好一行一個
- 區塊開始與結束的 {、} 符號要寫在獨立一行,不要跟在其他敘述的後面
- 字串的比較不要用==運算式,要用 StrIsEqualNoCase( ),而且最後把比較的值先指派給變數,再使用該變數來比較,例如:
@var $needRename = StrIsEqualNoCase($file, $sNewName); if ($needRename == 0) // 檔名不同需要改名 { // ... }
- 除錯可以用下列兩個函數:
- 彈出對話窗:MessageBox("標題", 數值變數, 1);、MessageBox("標題", 字串變數, 1);
- 輸出訊息到Log檔:用LogAppInfo(字串); 輸出偵錯訊息,腳本執行時的錯誤訊息也會自行輸出到「日期-MultiCommander.log」;Log檔由功能表【Help】→【Go to...】→【Log folder】可以開啟
MultiScript範例
剛好有個變更照片檔名的需求,說明狀況如下:
- 平常iPhone 4S拍攝的照片檔是使用Dropbox App的Upload上傳再同步到筆電
- 上傳後的檔名格式是:「Photo YY-M-D h mm ss.jpg」,小於10的月份、日期與小時只會有一位數,不會左補零
- 例如:「Photo 12-4-27 9 23 45.jpg」
- 要把iPhone 4S內的檔案重新拷貝到電腦,用連接線連好直接拷貝:
- 檔案格式是「IMG_序號.jpg」
- 先用改名工具Ant Renamer,以「Use EXIF info」的方式+「Photo %datetime%%ext%」格式變更檔名,%datetime%取得的日期格式是「YYYY-MM-DD hh-mm-ss」,例如:「Photo 2012-04-27 09-23-45.jpg」
- 再以Ant Renamer的「取代多重字串」,將「Photo 2012」修改成「Photo 12」
- 建立MultiScript如下,簡單說明重點:
- 以GetSelectedPaths( )取出選取了的檔案完整路徑名,傳回陣列
- 以arrayCount( )找出選取了的檔案個數(上述陣列的元素個數),進入for-loop,逐一變更檔名
- 變更檔名的邏輯寫在newName( ):
- 用StrSplit( )將檔名以空白分割成數個元素,傳回陣列
- 將月份、日期、小時的 0 去掉,時間的分隔字元由 "-" 變成空白
- 最後以內部命令MC.Filesystem.Rename變更檔名
function newName($sFileName) { @var $aTokens; @var $sHour; @var $sResult; @var $sToken; @var $iLen; @var $iTokens; @var $i; $sResult = ""; $aTokens = StrSplit($sFileName, " "); $iTokens = arrayCount($aTokens); for ($i=0; $i < $iTokens; $i++) { $sToken = $aTokens[$i]; if ($i == 1) // yy-mm-dd { @var $aTokens2 = StrSplit($sToken, "-"); @var $j; $sToken = ""; for ($j=0; $j < 3; $j++) { @var $sToken2; $sToken2 = $aTokens2[$j]; @var $iValue = strtonum($sToken2); if ($iValue <= 9) { $sToken2 = numtostr($iValue); } $sToken = $sToken + $sToken2; if ($j < 2) $sToken += "-"; } } if ($i == 2) // hh-mm-ss { @var $sFirstChar; $sFirstChar = StrSub($sToken, 0, 1); @var $iFirstChar = strtonum($sFirstChar); if ($iFirstChar == 0) // true, the first char is zero { $sToken = StrSub($sToken, 1, -1); } $sToken = StrReplace($sToken, " ", "-"); } $sResult = $sResult + $sToken+ " "; } return $sResult; } @var $aFiles = GetSelectedPaths(); @var $sTargetPath = GetTargetPath(); @var $iCount = arrayCount($aFiles); @var $i; @var $j; @var $sFileName; @var $aTokens; @var $iTokens; @var $sToken; @var $sNewName; for ($i=0; $i < $iCount; $i++) { $sFileName = $aFiles[$i]; LogAppInfo("filename=" + $sFileName); $sNewName = newName($sFileName); @var $needRename = StrIsEqualNoCase($sFileName, $sNewName); if ($needRename == 0) { @var $iPos = StrFind($sNewName, "\\Photo ", 0); if ($iPos > 0) { $sNewName = StrSub($sNewName, $iPos+1, -1); LogAppInfo("source=" + $sFileName + ", new=" + $sTargetPath ^ $sNewName); MC.Filesystem.Rename FILE="{$sFileName}" NEWNAME="{$sNewName}"; } } }
- 最後執行Multi Commander,瀏覽照片資料夾後,選取所有的檔案再執行自訂命令
我想應該還會有很多功能可以透過MultiScript來自行擴充的。Multi Commander雖然比較「年輕」,但看起來架構比較有彈性,作者更新得速度還滿快的,應該會是一套可以拭目以待的軟體。
Multi Commander資訊
- 官方網站:http://multicommander.com
- 線上文件:http://multicommander.com/docs
- 使用者自訂命令文件:http://multicommander.com/docs/user-defined-commands
- MultiScript語法:http://multicommander.com/docs/multiscript/languagesyntax
2018/03/05 YouTube教學影片:雙面板多頁籤的檔案管理工具 Multi Commander 的使用技巧
##
您可能也會有興趣的類似文章
- 使用Multi-Commander來簡化免空檔案的繁瑣操作 (0則留言, 2016/07/02)
- Multi Commander整合外部執行檔Fastcopy的方法 (0則留言, 2012/05/01)
- 利用MultiCommander的自訂命令以簡化Mega Downloader與SmartGet的解壓縮處理 (0則留言, 2016/08/13)
- 檔案/資料夾管理工具FreeCommander XE常用功能介紹 (7則留言, 2011/06/19)
- Obs150|多重筆記標籤操作-新增與移除:Multi Tag、TagMany、Notepad++、EmEditor、VS Code (0則留言, 2024/02/04)
- 檔案管理員的替代品: FreeCommander, FileAnt, FAR Manager (0則留言, 2005/01/29)
- Nexus 7最推薦10大工作用Apps 十之六:檔案管理:ES檔案瀏覽器與Total Commander (1則留言, 2012/12/13)
- [Obs#111] 幾個最近使用的外掛:Surfing、Quiet Outline、Colorful Tag、Share as Gist、Commander (0則留言, 2023/01/23)
- Obs148|Slash Commander 斜線命令快速插入表格、Callouts、程式碼區塊等 (0則留言, 2023/12/31)
- 設定mailto://為Gmail的步驟 (1則留言, 2013/04/27)
- 功能齊全的檔案總管工具:NexusFile V (0則留言, 2008/05/24)
- 掌握硬碟空間:免費工具DiskUsage與TreeSize教你輕鬆管理! (0則留言, 2024/04/03)
- [Obs#114] 取代Obsidian核心外掛的替代性外掛:Better Commander、Another Quick Switcher、Alternate File Tree、Quiet Outline (0則留言, 2023/02/20)
- AutoHotkey與Google+ Commander合用-以滑鼠移動訊息位置 (0則留言, 2011/10/31)
- SpaceFM:雙面板、多分頁的檔案+資料夾管理工具 (2則留言, 2013/11/13)
簡睿用的 FCXE 版號是多少? 網路資料夾會變慢的問題似乎已在 570 版之後解決, 僅供參考。
我有donate FreeCommander XE,目前手邊的版本是0.0.0.584。後面的版本有加了幾個選項設定,但在我家裡的環境裡沒什麼效用哩…