Lệnh FOR trong Batch file là một công cụ mạnh mẽ cho phép tự động hóa các tác vụ lặp đi lặp lại, xử lý danh sách tệp, thư mục và chuỗi văn bản. Việc nắm vững cách sử dụng for trong batch không chỉ giúp bạn viết script hiệu quả hơn mà còn mở ra khả năng xử lý hàng loạt dữ liệu phức tạp trên hệ điều hành Windows. Bài viết này sẽ phân tích chi tiết từ cú pháp cơ bản, các biến thể, ứng dụng thực tế, đến những mẹo tránh lỗi thường gặp, giúp bạn khai thác tối đa sức mạnh của vòng lặp FOR.
Cú Pháp Cơ Bản Của Lệnh FOR Trong Batch

Trước tiên, bạn cần hiểu cấu trúc tổng quát của lệnh FOR trong môi trường Batch. Cú pháp chuẩn như sau:
FOR %%variable IN (set) DO command
Trong đó:
- %%variable: Là biến tạm thời, thường dùng các chữ cái đơn như %%i, %%j, %%k. Lưu ý trong Batch file phải dùng hai dấu %, còn khi gõ trực tiếp trên Command Prompt chỉ dùng một dấu %.
- (set): Là tập hợp các giá trị, có thể là danh sách tên tệp, thư mục, chuỗi văn bản hoặc kết quả từ lệnh khác.
- command: Là lệnh hoặc khối lệnh sẽ thực thi cho mỗi giá trị trong (set).
- delims=: Xác định ký tự phân cách (mặc định là dấu cách và tab).
- tokens=: Chọn cột nào trong dòng sẽ được gán vào biến (ví dụ tokens=1,3 lấy cột 1 và 3).
- skip=n: Bỏ qua n dòng đầu tiên của tệp.
- eol=: Bỏ qua dòng bắt đầu bằng ký tự chỉ định.
Ví dụ minh họa đơn giản nhất: FOR %%i IN (1 2 3 4 5) DO echo %%i sẽ lần lượt in ra các số 1, 2, 3, 4, 5 trên màn hình. Đây là dạng duyệt danh sách trực tiếp, thích hợp cho các tác vụ có số lượng phần tử nhỏ và biết trước.
Khi làm việc với các tệp tin, . Ví dụ: FOR %%f IN (.txt) DO echo %%f sẽ liệt kê tất cả tệp.txt trong thư mục hiện tại. Lệnh FOR mặc định chỉ duyệt các tệp trong thư mục hiện hành, không bao gồm thư mục con.
Các Biến Thể Của Lệnh FOR Và Cách Sử Dụng Từng Loại

Để đáp ứng các nhu cầu khác nhau, Batch cung cấp bốn biến thể chính của lệnh FOR. Mỗi loại có cú pháp và mục đích riêng, giúp bạn linh hoạt trong việc xử lý dữ liệu.
FOR /D – Duyệt Qua Các Thư Mục
Biến thể này chỉ duyệt qua các thư mục thay vì tệp tin. Cú pháp: FOR /D %%variable IN (set) DO command. Ví dụ, để liệt kê tất cả thư mục con trong thư mục hiện tại, bạn dùng: FOR /D %%d IN () DO echo %%d. Lưu ý rằng nếu bạn dùng đường dẫn tuyệt đối như C:Users, set phải là C:Users.
Khi kết hợp với tham số /R (duyệt đệ quy), FOR /D có thể lấy tất cả thư mục trong cây thư mục. Ví dụ: FOR /D /R C:MyFolder %%d IN () DO @echo %%d sẽ in ra mọi thư mục con bên trong MyFolder.
FOR /R – Duyệt Đệ Quy Qua Cây Thư Mục
Đây là biến thể mạnh mẽ cho phép duyệt tất cả tệp trong thư mục và các thư mục con. Cú pháp: FOR /R [[drive:]path] %%variable IN (set) DO command. Nếu không chỉ định path, nó sẽ duyệt từ thư mục hiện tại.
Ví dụ thực tế: Bạn muốn đổi tên tất cả các tệp.jpg trong ổ D và thư mục con thành.png. Lệnh sẽ là:
FOR /R D: %%f IN (.jpg) DO ren “%%f” “%%~nf.png”
Trong đó %%~nf trích xuất phần tên không có phần mở rộng của tệp. Đây là kỹ thuật rất hữu ích khi xử lý hàng loạt.
FOR /L – Vòng Lặp Dựa Trên Số Học
Khác với các dạng duyệt danh sách, FOR /L tạo ra một chuỗi số tăng dần hoặc giảm dần. Cú pháp: FOR /L %%variable IN (start, step, end) DO command. Ví dụ: FOR /L %%i IN (1,2,10) DO echo %%i sẽ in ra 1, 3, 5, 7, 9 (bước nhảy 2).
Ứng dụng phổ biến: tạo nhiều thư mục cùng lúc. Giả sử bạn cần tạo thư mục từ Folder01 đến Folder20, lệnh sẽ là:
FOR /L %%n IN (1,1,20) DO mkdir Folder%%n. Cách này tiết kiệm rất nhiều thời gian so với tạo thủ công.
FOR /F – Xử Lý Kết Quả Từ Lệnh Hoặc Tập Tin
Đây là biến thể phức tạp nhưng linh hoạt nhất, dùng để phân tích nội dung từ tệp văn bản, chuỗi hoặc đầu ra của lệnh khác. Cú pháp cơ bản: FOR /F “options” %%variable IN (file-set | “string” | ‘command’) DO command.
Các tùy chọn (options) thường dùng:
Ví dụ: Đọc tệp userlist.txt, mỗi dòng có định dạng “ID Tên”, và in ra ID:
FOR /F “tokens=1” %%u IN (userlist.txt) DO echo %%u. Nếu muốn lấy cả ID và Tên, dùng “tokens=1,2” và gán hai biến %%u và %%v.
Khi dùng với output từ lệnh, cú pháp đặt trong dấu nháy đơn. Ví dụ: FOR /F “tokens=” %%i IN (‘dir /b .txt’) DO echo %%i sẽ lấy kết quả của lệnh dir và hiển thị từng dòng.
| Biến thể | Cú pháp chính | Mục đích sử dụng | Ví dụ nhanh |
|---|---|---|---|
| FOR cơ bản | FOR %%v IN (set) DO cmd | Duyệt danh sách tĩnh hoặc tệp theo wildcard | FOR %%i IN (a b c) DO echo %%i |
| FOR /D | FOR /D %%v IN (set) DO cmd | Chỉ duyệt thư mục | FOR /D %%d IN () DO echo %%d |
| FOR /R | FOR /R [path] %%v IN (set) DO cmd | Duyệt đệ quy tất cả tệp trong thư mục con | FOR /R C: %%f IN (.log) DO del “%%f” |
| FOR /L | FOR /L %%v IN (start,step,end) DO cmd | Vòng lặp số học | FOR /L %%n IN (0,5,100) DO echo %%n |
| FOR /F | FOR /F “options” %%v IN (set) DO cmd | Phân tích tệp, chuỗi, output lệnh | FOR /F “tokens=2” %%i IN (data.txt) DO… |
Lợi Ích Khi Sử Dụng FOR Trong Batch So Với Các Phương Pháp Khác

Việc thành thạo cách sử dụng for trong batch mang lại nhiều lợi thế vượt trội so với việc gõ lệnh thủ công hoặc dùng các công cụ đồ họa. Tính tự động hóa là lợi ích đầu tiên: chỉ với vài dòng lệnh,
Dùng FOR /R. Ví dụ: FOR /R %%f IN (.) DO echo %%f sẽ liệt kê mọi tệp trong thư mục hiện tại và tất cả thư mục con. Nếu muốn giới hạn loại tệp, thay . bằng .txt chẳng hạn.
Tại sao lệnh FOR của tôi không chạy khi gõ trực tiếp trong Command Prompt?
Khi gõ trong Command Prompt, bạn chỉ dùng một dấu %. Ví dụ: FOR %i IN (1 2 3) DO echo %i. Còn trong file.bat hoặc.cmd phải dùng %%i. Nếu bạn gõ %%i trực tiếp trên CMD, nó sẽ báo lỗi ký tự không hợp lệ.
Có thể dùng lệnh FOR để duyệt qua các dòng trong một biến không?
Có,
Dùng các toán tử mở rộng của biến: %%~xf trả về phần mở rộng (ví dụ.txt), %%~nf trả về tên không có mở rộng, %%~df trả về ổ đĩa, %%~pf trả về đường dẫn. Ví dụ: FOR %%f IN (.txt) DO echo %%~nf sẽ in ra tên tệp không có.txt.
Có thể dùng FOR để thực hiện nhiều lệnh khác nhau cho mỗi tệp không?
Hoàn toàn được. Bạn nhóm các lệnh trong dấu ngoặc đơn. Cú pháp: FOR %%f IN (.log) DO (echo Đang xử lý %%f & del “%%f” & echo Đã xóa). Hãy chú ý đóng ngoặc đơn đúng cách.
Kết Luận

Việc hiểu và áp dụng thành thạo cách sử dụng for trong batch là kỹ năng quan trọng đối với bất kỳ ai làm việc với hệ thống Windows, từ quản trị viên, lập trình viên đến người dùng văn phòng muốn tự động hóa tác vụ. Mỗi biến thể FOR đều có điểm mạnh riêng: FOR /D cho thư mục, FOR /R cho duyệt đệ quy, FOR /L cho vòng lặp số, và FOR /F cho xử lý dữ liệu từ nhiều nguồn.
Bằng cách thực hành thường xuyên với các ví dụ đơn giản như đổi tên tệp, xóa tệp theo điều kiện, hay đọc nội dung tập tin, bạn sẽ nhanh chóng làm chủ công cụ này. Đừng quên các lưu ý về cú pháp, dấu ngoặc kép, và delayed expansion để tránh những lỗi không đáng có. Hãy bắt đầu xây dựng bộ script của riêng bạn ngay hôm nay để tiết kiệm thời gian và nâng cao hiệu suất làm việc.







