超越錄製:指令碼的條件分支、迴圈與變數
透過錄製並重播操作來建立巨集,是將重複工作自動化最簡便的方法。然而,錄製的巨集有一項根本特性,那就是「每次都執行完全相同的操作」。實際業務中包含許多需要依情況改變動作的判斷,例如「如果庫存為零,就下單訂貨」或「如果總額超過預算,就發出警告」。僅靠錄製無法處理這種「判斷」。
這時,「指令碼」便派上用場。透過指令碼,可以將條件分支(如果……就……)、迴圈(重複)和變數(用來保存值的容器)等程式設計的基本要素融入自動化。聽到「程式設計」,你或許會感到畏懼,但這些要素只是將日常判斷直接化為具體形式,概念並不難。本文將把指令碼作為錄製之後的下一步,深入淺出地解說其三大支柱。
條件分支(IF/ELSE):讓它做出判斷
條件分支是一種「僅在某個條件成立時執行特定處理」的機制。IF區塊只會在條件為真(正確)時執行其中的處理,而ELSE則負責其他情況。例如,可以用它實現這樣的動作:「如果畫面上出現『錯誤』字樣,就通知負責人;否則直接進入下一步。」
可作為條件的內容包括畫面上顯示的值、特定像素的顏色,或變數中保存的數值等。人類會下意識地完成「查看畫面、判斷情況、決定下一步行動」這一連串流程。條件分支正是為了將這種判斷納入自動化。只要撰寫一次,此後電腦便會代替你,每次都做出正確判斷。
迴圈(LOOP):讓它重複執行
迴圈是一種多次重複相同處理的機制。它與指定巨集的「重播次數」相似,但指令碼中的迴圈更加靈活。除了可以指定「重複10次」這類次數外,還能依情況重複,例如「重複到清單中沒有更多資料列」或「重複到滿足特定條件」。
迴圈的真正價值會在處理大量資料時展現出來。只要用迴圈包住「處理一筆資料」的操作,就能將其變成「處理清單中的所有資料」。無論是100筆還是1000筆,都只需撰寫處理一筆資料的操作,其餘資料會由迴圈自動逐筆處理。手動操作需要數小時的工作,使用迴圈後只需撰寫一次,接下來等待完成即可。這正是自動化從節省「幾分鐘」躍升為節省「數小時」的分水嶺。
變數:記住數值
變數是用來在處理過程中暫時保存值的「盒子」。計數器(目前是第幾次)、檔案名稱、從畫面讀取的數值、計算過程中的中間結果——將這些值存入變數後,就能在後續步驟中重複使用。例如,「將儲存格的值讀入變數,如果超過1萬,就轉錄到另一個工作表」這類處理,可以透過結合變數與條件分支來實現。
當變數、條件分支與迴圈三者齊備時,自動化的表現力會迅速提升。「讀取資料(變數)、依內容改變處理方式(條件分支)、套用至所有資料(迴圈)」——光是這個組合,就能涵蓋相當大一部分實務工作。這裡正是單純的錄製與播放無法觸及的「智慧自動化」入口。
透過錯誤處理實現「不中斷的自動化」
熟悉條件分支、迴圈與變數後,接下來要掌握的就是「錯誤處理」。長期執行自動化時,意外情況必然會發生。網路瞬間斷線、找不到原本應該開啟的檔案、畫面顯示與平常不同——遇到這些情況時,毫無準備的指令碼會當場完全停止。如果是在夜間無人值守執行,工作可能一直停到隔天早上。
這時,TRY/CATCH 錯誤處理機制就能派上用場。它可以實現這樣的流程:「即使 TRY 區塊中發生失敗,也不會讓所有處理就此停止,而是切換到 CATCH 區塊中編寫的處理(記錄錯誤、傳送通知、只跳過這一筆並繼續處理下一筆等)。」如此一來,即使有一筆失敗,其餘項目也能處理到最後,從而實現可靠的自動化。也就是把人類習以為常的「即使失敗,也先記錄下來再繼續」這種應對方式教給指令碼。
認識常用的 SCR 命令
makuroku 的 SCR 指令碼備有實務中經常使用的各種命令。您不需要一次記住所有命令,但了解它能做些什麼,有助於拓展思路,讓您想到「這個好像也能自動化」。以下列出一些代表性的命令。
- • FIND_IMAGE / WAIT_IMAGE:透過圖像尋找或等待畫面上的元素
- • IF / ELSE / LOOP:條件分支與迴圈
- • SET / ADD / SUB:變數賦值與計算
- • READ_FILE / WRITE_FILE:讀取與寫入檔案
- • HTTP_GET / POST:與外部服務通訊
- • NOTIFY / PROMPT:顯示通知、要求使用者輸入
透過組合這些功能,可以實現「從檔案讀取資料、依條件改變處理方式、將結果傳送至外部服務並通知完成」等僅靠簡單錄製遠遠無法達成的進階自動化。而且,每個命令的作用都很簡單,因此並不難學會。只要從目前需要的命令開始,逐步擴充自己的工具庫即可。
可透過腳本實現的自動化範例
將條件分支、迴圈、變數和錯誤處理結合起來,就能實現簡單錄製遠遠無法達成的自動化。讓我們來看幾個具體範例。比如,「逐一開啟資料夾中的所有檔案,檢查內容,並只將符合條件的檔案移至另一個資料夾」這項工作,就可以透過迴圈走訪所有檔案,再使用條件分支進行分類來實現。手動操作需要一小時的分類工作,只要編寫一次腳本,幾分鐘內即可完成。
另一個例子是,「定期從網站取得資料,與上一次的值進行比較,並在發生變化時發出通知」這類監控工作也是腳本所擅長的領域。透過 HTTP 通訊取得資料,與儲存在變數中的上一次數值比較,再利用條件分支實現「有變化就通知」。將其與排程執行結合,就能建立一套不需你做任何操作也不會錯過變化的監控機制。
這類自動化乍看之下似乎很難,但其中的每個要素——迴圈、條件分支、變數、通訊、通知——其實都很簡單。難的是「一次理解全部內容」,而不是「逐一將它們組合起來」。可以先只學條件分支,接著只學迴圈,像這樣從目前需要的要素開始逐步拓展,不知不覺間,你就能自行建立相當進階的自動化了。
重要的是,不要一開始就追求完美的腳本。先製作一個能執行的最小版本,實際執行後,再逐步修正不順利的地方。makuroku 具有即時醒目顯示目前執行行的除錯功能,因此你可以一邊直觀確認「現在執行到哪裡、正在發生什麼」,一邊進行改善。嘗試、修正、再次嘗試——這樣的反覆過程才是熟練運用腳本的最快途徑。
保持腳本易讀的技巧
腳本並非寫完就結束,之後往往還需要重新查看和修改。因此,編寫時就注重「易讀性」,將來會為自己省下很多麻煩。這裡有幾個技巧。首先,要為變數取一個含義明確的名稱。不要使用「x」或「a」,而應使用「總金額」「目標檔案名稱」等能呈現內容的名稱,這樣日後再看時,也能立即理解處理意圖。
其次,為每組處理加上註解。哪怕只是「從這裡開始取得資料」「在這裡檢查金額」這樣的簡短備註,也會讓整個腳本的流程更容易理解。此外,將複雜的處理拆分為多個小腳本也很有效。相比一支冗長的腳本,依職責劃分的一組短腳本更容易修改和重複使用。以「未來的自己能否讀懂」為標準來編寫,是打造可長期使用腳本的秘訣。
腳本除錯方法
編寫腳本時,難免會遇到無法如預期執行的情況。這時不要慌張,找出原因的過程就是「除錯」。除錯的基礎,是明確區分「到哪裡為止執行正常,從哪裡開始與預期不同」。makuroku 具有即時醒目顯示目前執行行的功能,以及在畫面上顯示中間值的 PRINT 輸出功能,方便你一邊直觀確認「現在執行到哪裡、正在發生什麼」,一邊找出原因。
有效的除錯方式,是先將處理流程切分成較小的部分,再逐段確認其運作情況。如果試圖一次完成所有內容,就很難判斷問題出在哪裡。逐步撰寫、經常執行,確認能正確運作後再進到下一步。這種踏實的反覆操作,最終會帶來最快、最可靠的指令碼開發。即使出現錯誤,只要把它視為提示你「該修改哪裡」的線索,除錯就沒什麼好怕的。
學習指令碼的建議順序
以下說明學習指令碼各項要素的建議順序。首先要掌握的當然是條件分支(IF/ELSE)。「如果……就……」這類判斷是一切自動化的基礎。接下來是迴圈(LOOP)。在處理大量資料時,重複處理能發揮極大的效果。只要學會使用這兩項,就能自動完成許多單純錄製無法實現的工作。
再下一步是變數。保存數值的機制與條件分支和迴圈相結合,可以實現更靈活的處理。學到這裡後,就可以學習錯誤處理(TRY/CATCH)了。如果要長期無人值守運作,就必須具備即使途中失敗也不會停止的機制。最後,只要依照目的,從實際需要的內容開始學習檔案操作、HTTP通訊、OCR等專業指令即可。
重要的是,不要試圖一次記住所有內容。在實際工作中,當你想到「如果能做到這個就方便了」時,再去查找並嘗試使用相應功能。這種「因實際需要而學習」的方式,最終最容易真正掌握。與其從頭開始按順序閱讀教材,不如一邊自動化眼前的工作,一邊隨時吸收當下所需的要素,這樣更能培養實用能力。
指令碼乍看之下可能很難,但每一個要素都很簡單,只要循序漸進地學習,就一定能夠掌握。一旦掌握,你能夠自動化的工作範圍將大幅擴展。請先從錄製開始,再嘗試加入一個條件分支,以此踏入指令碼的世界。
從錄製平順過渡到指令碼
越是覺得「指令碼似乎很難」的人,越應該知道:你不需要從空白開始撰寫。在 makuroku 中,可以先透過GUI錄製操作,再將巨集轉換為可編輯的SCR指令碼。也就是說,你一開始就能取得一個可運作的架構。之後只需修改必要的部分,例如用LOOP包住需要重複的區段,或在需要判斷的位置加入IF。
此外,輸入時會進行語法檢查,因此能當場提示撰寫錯誤。還有一項除錯功能會即時醒目顯示目前執行的行,讓你一眼就能看出「現在正處理到哪裡」。有了這些輔助功能,從錄製過渡到指令碼十分平順。先透過錄製建立架構,再逐步加入條件和迴圈——按照這種方式,即使沒有程式設計經驗,也能親手建立實用的自動化。使用 makuroku,可以免費試用所有這些功能。
免費試用
用 makuroku 來自動化它
makuroku 錄製你的滑鼠和鍵盤操作,然後自動回放。需要更多時可加上 SCR 腳本和 AI(MCP)整合。所有功能在 Windows 上免費使用。