Vượt xa tính năng ghi thao tác: rẽ nhánh có điều kiện, vòng lặp và biến trong tập lệnh
Macro ghi và phát lại thao tác là cách đơn giản nhất để tự động hóa công việc lặp đi lặp lại. Tuy nhiên, macro đã ghi có một đặc tính cơ bản: “lần nào cũng thực hiện chính xác cùng một việc”. Trong công việc thực tế có rất nhiều quyết định làm thay đổi hành động tùy theo tình huống, chẳng hạn “nếu tồn kho bằng không thì đặt hàng” hoặc “nếu tổng số tiền vượt ngân sách thì cảnh báo”. Chỉ ghi thao tác thì không thể xử lý những “quyết định” này.
Đó là lúc “tập lệnh” phát huy tác dụng. Tập lệnh cho phép bạn đưa các yếu tố lập trình cơ bản như rẽ nhánh có điều kiện (“nếu… thì…”), vòng lặp (lặp lại) và biến (chiếc hộp ghi nhớ giá trị) vào quy trình tự động hóa. Từ “lập trình” có thể khiến bạn e ngại, nhưng các yếu tố này chỉ đơn giản là cụ thể hóa những quyết định thường ngày, nên cách tư duy không hề khó. Bài viết này sẽ giải thích dễ hiểu ba trụ cột của tập lệnh như bước tiếp theo sau khi ghi thao tác.
Rẽ nhánh có điều kiện (IF/ELSE): cho phép đưa ra quyết định
Rẽ nhánh có điều kiện là cơ chế “chỉ thực hiện một xử lý cụ thể khi điều kiện nhất định được thỏa mãn”. Khối IF chỉ thực thi nội dung bên trong khi điều kiện là đúng, còn ELSE xử lý các trường hợp còn lại. Ví dụ, bạn có thể biểu diễn hành động: “Nếu trên màn hình có chữ ‘Lỗi’ thì thông báo cho người phụ trách; nếu không thì chuyển thẳng sang bước tiếp theo.”
Điều kiện có thể là giá trị hiển thị trên màn hình, màu của một pixel cụ thể hoặc số được lưu trong biến. Con người thường vô thức thực hiện cả chuỗi hành động “nhìn màn hình, đánh giá tình hình rồi quyết định hành động tiếp theo”. Rẽ nhánh có điều kiện chính là cách đưa quá trình phán đoán đó vào tự động hóa. Chỉ cần viết một lần, sau đó máy tính sẽ thay bạn đưa ra quyết định chính xác trong mọi lần chạy.
Vòng lặp (LOOP): cho phép lặp lại thao tác
Vòng lặp là cơ chế lặp lại cùng một xử lý nhiều lần. Nó tương tự việc chỉ định “số lần phát lại” của macro, nhưng vòng lặp trong tập lệnh linh hoạt hơn nhiều. Ngoài việc chỉ định số lần như “lặp lại 10 lần”, bạn còn có thể lặp tùy theo tình huống, chẳng hạn “lặp đến khi danh sách không còn dòng nào” hoặc “lặp đến khi một điều kiện cụ thể được thỏa mãn”.
Giá trị thực sự của vòng lặp thể hiện khi xử lý lượng dữ liệu lớn. Chỉ cần đặt thao tác “xử lý một mục dữ liệu” trong vòng lặp, bạn có thể biến nó thành “xử lý toàn bộ dữ liệu trong danh sách”. Dù có 100 hay 1.000 mục, bạn chỉ phải viết phần xử lý cho một mục; vòng lặp sẽ tự động duyệt qua tất cả các mục còn lại. Một công việc thủ công mất hàng giờ giờ đây chỉ cần viết một lần rồi chờ hoàn tất. Đây chính là điểm mà tự động hóa chuyển từ tiết kiệm “vài phút” sang tiết kiệm “nhiều giờ”.
Biến: ghi nhớ giá trị
Biến là một “chiếc hộp” dùng để tạm thời ghi nhớ giá trị trong quá trình xử lý. Bộ đếm (đang ở lần thứ mấy), tên tệp, giá trị số đọc từ màn hình, kết quả trung gian của phép tính — khi lưu các giá trị này vào biến, bạn có thể tái sử dụng chúng ở các bước sau. Ví dụ, thao tác “đọc giá trị của một ô vào biến, rồi chép sang trang tính khác nếu giá trị đó vượt quá 10.000” được thực hiện bằng cách kết hợp biến với rẽ nhánh có điều kiện.
Khi có đủ ba yếu tố là biến, rẽ nhánh có điều kiện và vòng lặp, khả năng biểu đạt của tự động hóa sẽ tăng lên nhanh chóng. “Đọc dữ liệu (biến), thay đổi cách xử lý theo nội dung (rẽ nhánh có điều kiện), rồi áp dụng cho tất cả các mục (vòng lặp)” — chỉ riêng sự kết hợp này đã có thể đáp ứng một phần đáng kể công việc thực tế. Đây chính là cánh cửa bước vào “tự động hóa thông minh” mà cách ghi và phát lại đơn giản không thể đạt tới.
Tạo “quy trình tự động hóa không dừng lại” bằng cách xử lý lỗi
Sau khi đã quen với rẽ nhánh có điều kiện, vòng lặp và biến, nội dung tiếp theo cần học là “xử lý lỗi”. Khi vận hành tự động hóa trong thời gian dài, những sự cố ngoài dự kiến chắc chắn sẽ xảy ra. Mạng bị ngắt trong chốc lát, không tìm thấy tệp đáng lẽ phải mở, hoặc màn hình hiển thị khác với bình thường — khi đó, một tập lệnh không có biện pháp dự phòng sẽ dừng hoàn toàn ngay tại chỗ. Nếu đang chạy không người giám sát vào ban đêm, công việc có thể bị đình trệ cho đến sáng hôm sau.
Đây là lúc cơ chế xử lý lỗi TRY/CATCH phát huy tác dụng. Bạn có thể thiết lập luồng như sau: “Ngay cả khi xảy ra lỗi trong khối TRY, toàn bộ quy trình sẽ không dừng lại mà chuyển sang các thao tác được viết trong khối CATCH, chẳng hạn như ghi lại lỗi, gửi thông báo, chỉ bỏ qua mục bị lỗi rồi tiếp tục với mục kế tiếp.” Nhờ vậy, bạn có được một quy trình tự động hóa vững chắc, trong đó dù một mục thất bại, các mục còn lại vẫn được xử lý đến cùng. Nói cách khác, ta dạy cho tập lệnh cách ứng phó mà con người vẫn làm một cách tự nhiên: “Dù thất bại, hãy ghi lại trước rồi tiếp tục.”
Tìm hiểu các lệnh SCR thường dùng
Tập lệnh SCR của makuroku có đầy đủ các lệnh thường xuyên được sử dụng trong công việc thực tế. Bạn không cần ghi nhớ tất cả cùng một lúc, nhưng nếu biết có thể làm được những gì, bạn sẽ dễ nảy ra ý tưởng rằng “việc này có lẽ cũng tự động hóa được”. Hãy cùng điểm qua một số lệnh tiêu biểu.
- • FIND_IMAGE / WAIT_IMAGE: tìm phần tử trên màn hình bằng hình ảnh hoặc chờ phần tử xuất hiện
- • IF / ELSE / LOOP: rẽ nhánh có điều kiện và lặp
- • SET / ADD / SUB: gán giá trị cho biến và tính toán
- • READ_FILE / WRITE_FILE: đọc và ghi tệp
- • HTTP_GET / POST: giao tiếp với các dịch vụ bên ngoài
- • NOTIFY / PROMPT: Hiển thị thông báo và yêu cầu người dùng nhập dữ liệu
Khi kết hợp các chức năng này, bạn có thể tạo ra những quy trình tự động hóa nâng cao mà thao tác ghi đơn thuần không thể nào đạt tới, chẳng hạn như “đọc dữ liệu từ tệp, thay đổi cách xử lý theo điều kiện, gửi kết quả đến dịch vụ bên ngoài và thông báo khi hoàn tất”. Hơn nữa, vai trò của từng lệnh đều đơn giản nên không khó học. Bạn chỉ cần bắt đầu với những lệnh cần thiết rồi dần dần mở rộng bộ công cụ của mình.
Ví dụ về tự động hóa có thể thực hiện bằng tập lệnh
Khi kết hợp rẽ nhánh có điều kiện, vòng lặp, biến và xử lý lỗi, bạn có thể tạo ra những quy trình tự động hóa mà thao tác ghi đơn thuần không thể nào đạt tới. Hãy xem một vài ví dụ cụ thể. Chẳng hạn, tác vụ “mở lần lượt tất cả các tệp trong một thư mục, kiểm tra nội dung và chỉ chuyển những tệp đáp ứng điều kiện sang thư mục khác” có thể được thực hiện bằng cách dùng vòng lặp để duyệt toàn bộ tệp và rẽ nhánh có điều kiện để phân loại. Công việc phân loại mất một giờ nếu làm thủ công sẽ chỉ mất vài phút sau khi bạn viết tập lệnh một lần.
Một ví dụ khác là công việc giám sát như “định kỳ lấy dữ liệu từ một trang web, so sánh với giá trị lần trước và thông báo nếu có thay đổi”, đây cũng là lĩnh vực mà tập lệnh phát huy thế mạnh. Dữ liệu được lấy qua giao tiếp HTTP, so sánh với giá trị trước đó đã lưu trong biến, rồi dùng rẽ nhánh có điều kiện để “thông báo nếu có thay đổi”. Khi kết hợp với thực thi theo lịch, bạn sẽ có một hệ thống giám sát không bỏ sót bất kỳ thay đổi nào mà không cần tự mình làm gì cả.
Những quy trình tự động hóa như vậy thoạt nhìn có vẻ khó, nhưng từng yếu tố — vòng lặp, rẽ nhánh có điều kiện, biến, giao tiếp và thông báo — đều đơn giản. Điều khó là “hiểu tất cả cùng một lúc”, chứ không phải “kết hợp từng yếu tố một”. Hãy bắt đầu chỉ với rẽ nhánh có điều kiện, sau đó chỉ với vòng lặp, rồi dần dần mở rộng từ những yếu tố bạn cần. Đến khi nhận ra, bạn đã có thể tự tạo những quy trình tự động hóa khá nâng cao.
Điều quan trọng là không nhắm đến một tập lệnh hoàn hảo ngay từ đầu. Trước tiên, hãy tạo phiên bản tối thiểu có thể chạy được, thực sự chạy thử rồi dần dần sửa những chỗ chưa hoạt động tốt. makuroku có chức năng gỡ lỗi làm nổi bật dòng đang thực thi theo thời gian thực, vì vậy bạn có thể cải thiện tập lệnh trong khi trực tiếp kiểm tra “hiện đang ở đâu và điều gì đang xảy ra”. Thử, sửa rồi thử lại — chính quá trình lặp này là con đường nhanh nhất để làm chủ tập lệnh.
Mẹo giúp tập lệnh luôn dễ đọc
Tập lệnh không phải viết xong là kết thúc; sau này bạn thường phải xem lại và sửa đổi. Vì vậy, nếu chú ý đến “tính dễ đọc” ngay khi viết, bạn sẽ giúp ích rất nhiều cho chính mình trong tương lai. Có một vài mẹo hữu ích. Trước hết, hãy đặt tên biến có ý nghĩa rõ ràng. Thay vì “x” hoặc “a”, hãy dùng những tên cho biết nội dung như “tổng số tiền” hoặc “tên tệp mục tiêu”; nhờ đó, khi xem lại sau này, bạn sẽ hiểu ngay mục đích của quá trình xử lý.
Tiếp theo, hãy thêm chú thích cho từng nhóm xử lý. Chỉ cần những ghi chú ngắn như “bắt đầu lấy dữ liệu từ đây” hoặc “kiểm tra số tiền tại đây” cũng giúp bạn dễ theo dõi luồng tổng thể của tập lệnh hơn. Việc chia quá trình xử lý phức tạp thành nhiều tập lệnh nhỏ cũng rất hiệu quả. Một tập hợp các tập lệnh ngắn được phân chia theo vai trò sẽ dễ sửa đổi và tái sử dụng hơn một tập lệnh dài khổng lồ. Bí quyết để tạo tập lệnh có thể dùng lâu dài là viết theo tiêu chí: “Chính mình trong tương lai có đọc và hiểu được không?”
Cách gỡ lỗi tập lệnh
Khi viết tập lệnh, chắc chắn sẽ có lúc nó không hoạt động như mong muốn. Quá trình bình tĩnh tìm ra nguyên nhân trong trường hợp đó được gọi là “gỡ lỗi”. Cơ sở của việc gỡ lỗi là xác định rõ “đến đâu vẫn hoạt động đúng và từ đâu bắt đầu khác với dự kiến”. makuroku có chức năng làm nổi bật dòng đang thực thi theo thời gian thực và đầu ra PRINT hiển thị các giá trị trung gian trên màn hình, giúp bạn tìm nguyên nhân trong khi trực tiếp kiểm tra “hiện đang ở đâu và điều gì đang xảy ra”.
Cách gỡ lỗi hiệu quả là trước tiên chia quy trình thành các phần nhỏ, rồi kiểm tra hoạt động của từng phần một. Nếu cố hoàn thiện mọi thứ cùng một lúc, bạn sẽ khó xác định vấn đề xảy ra ở đâu. Hãy viết từng chút, chạy thường xuyên và chỉ chuyển sang bước tiếp theo sau khi xác nhận rằng mọi thứ hoạt động chính xác. Việc kiên trì lặp lại như vậy cuối cùng sẽ giúp bạn tạo script nhanh chóng và đáng tin cậy nhất. Ngay cả khi có lỗi, việc gỡ lỗi cũng không đáng sợ nếu bạn coi đó là gợi ý cho biết “cần sửa ở đâu”.
Thứ tự nên học về script
Dưới đây là thứ tự tham khảo để học các thành phần của script. Trước tiên, bạn nên học phân nhánh có điều kiện (IF/ELSE). Những phán đoán kiểu “nếu… thì…” là nền tảng của mọi hoạt động tự động hóa. Tiếp theo là vòng lặp (LOOP). Việc xử lý lặp lại phát huy hiệu quả rất lớn khi làm việc với lượng dữ liệu lớn. Chỉ cần sử dụng được hai thành phần này, bạn đã có thể tự động hóa nhiều công việc mà việc ghi thao tác đơn thuần không thể thực hiện.
Tiếp theo là biến. Cơ chế ghi nhớ giá trị khi kết hợp với phân nhánh có điều kiện và vòng lặp sẽ cho phép xử lý linh hoạt hơn. Khi đã đến bước này, hãy học cách xử lý lỗi (TRY/CATCH). Nếu muốn vận hành tự động trong thời gian dài mà không có người giám sát, bạn cần một cơ chế không dừng lại ngay cả khi gặp lỗi giữa chừng. Cuối cùng, bạn chỉ cần học dần những lệnh chuyên biệt phù hợp với mục đích khi cần đến, chẳng hạn như thao tác tệp, giao tiếp HTTP và OCR.
Điều quan trọng là đừng cố học tất cả cùng một lúc. Trong công việc thực tế, khi nghĩ rằng “sẽ thật tiện nếu làm được điều này”, hãy tìm hiểu và thử sử dụng chức năng tương ứng. Cách “học vì nhu cầu thực tế” này cuối cùng là phương pháp giúp bạn nắm vững kiến thức tốt nhất. Thay vì đọc sách giáo khoa lần lượt từ đầu, việc vừa tự động hóa công việc trước mắt vừa tiếp thu các thành phần cần thiết vào từng thời điểm sẽ giúp bạn phát triển năng lực thực hành tốt hơn.
Thoạt nhìn, script có vẻ khó, nhưng từng thành phần riêng lẻ đều đơn giản và bạn chắc chắn có thể nắm vững nếu học theo từng bước. Một khi đã thành thạo, phạm vi công việc bạn có thể tự động hóa sẽ mở rộng đáng kể. Hãy bắt đầu bằng việc ghi thao tác, sau đó thêm một nhánh điều kiện để bước vào thế giới của script.
Chuyển đổi nhẹ nhàng từ ghi thao tác sang script
Những người cảm thấy “script có vẻ khó” càng nên biết rằng bạn không cần phải viết từ một trang trắng. Trong makuroku, trước tiên bạn có thể ghi lại các thao tác bằng GUI, sau đó chuyển macro đó thành script SCR có thể chỉnh sửa. Nói cách khác, ngay từ đầu bạn đã có một bộ khung hoạt động được. Sau đó, bạn chỉ cần sửa những phần cần thiết, chẳng hạn như dùng LOOP bao quanh đoạn muốn lặp lại hoặc thêm IF vào vị trí cần đưa ra phán đoán.
Ngoài ra, chức năng kiểm tra cú pháp hoạt động ngay trong khi nhập nên sẽ báo lỗi viết sai tại chỗ. Tính năng gỡ lỗi cũng làm nổi bật theo thời gian thực dòng đang được thực thi, giúp bạn nhìn thấy rõ “hiện đang xử lý đến đâu”. Nhờ những hỗ trợ này, quá trình chuyển từ ghi thao tác sang script diễn ra rất nhẹ nhàng. Trước tiên, hãy tạo bộ khung bằng cách ghi thao tác, rồi dần dần thêm điều kiện và vòng lặp. Với cách làm này, ngay cả người chưa có kinh nghiệm lập trình cũng có thể tự tay tạo ra các quy trình tự động hóa thiết thực. Với makuroku, bạn có thể dùng thử miễn phí tất cả các tính năng này.
Dùng thử miễn phí
Tự động hóa với makuroku
makuroku ghi lại chuột và bàn phím của bạn, sau đó phát lại tự động. Thêm script SCR và tích hợp AI (MCP) khi cần thêm. Tất cả tính năng miễn phí trên Windows.
Bài viết khác