Sử dụng câu lệnh FOR
Câu lệnh FOR là một lệnh cho phép bạn “lặp” hoặc lặp lại các lệnh nhiều lần. Nó rất giống với câu lệnh FOR được cung cấp trong một số ngôn ngữ lập trình. Câu lệnh FOR thường được sử dụng trong các tệp hàng loạt, nhưng nó cũng có thể được sử dụng trực tiếp trên dòng lệnh.
Xin nhắc lại, dạng chung của vòng lặp FOR là:
FOR %variable IN (set) DO command [command-parameters]
Trong đó ‘biến’ là một ký tự đơn, ‘(set)’ chỉ định một tập hợp một hoặc nhiều tệp, ‘lệnh’ là lệnh nhắc lệnh được thực thi cho từng tệp trong tập hợp và ‘tham số lệnh’ là tùy chọn các tham số được chuyển tới ‘lệnh’.
Vì vậy, giả sử bạn đã được cung cấp một số tệp COM .dll mà bạn cần đăng ký trong Sổ đăng ký của Windows. Bạn có thể đặt tất cả chúng trong một thư mục và sau đó có thể chạy lệnh sau từ trong thư mục đó:
C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
Điều này làm, đối với mỗi tệp .dll mà nó tìm thấy trong thư mục hiện tại, là chạy chương trình regsvr32 trên đó. (Chuyển đổi “/ s” chỉ đơn giản là yêu cầu regsvr32 thực hiện công việc của nó một cách âm thầm.) Biến được sử dụng (“% i”) phân biệt chữ hoa chữ thường và nó giả định giá trị của từng tệp .dll lần lượt. Sau đó, tên của tệp .dll được chuyển đến chương trình regsvr32 bằng cách sử dụng cùng một biến “% i”.
Một biến thể của vòng lặp FOR chung sử dụng công tắc / L và có dạng chung sau:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
Điều này thực hiện một vòng lặp trong đó biến% lần đầu tiên được đặt thành ‘bắt đầu’ và được tăng dần theo ‘bước’ cho đến khi nó chạm đến giá trị ‘kết thúc’. (Cách sử dụng này sẽ rất quen thuộc với các lập trình viên.) Vì vậy, giả sử bạn cần hiển thị danh sách các số từ 1 đến 5. Bạn có thể làm theo cách này:
C:\> FOR /L %i IN (1,1,5) DO @echo %i
Một biến thể khác của vòng lặp FOR sử dụng công tắc / D và có dạng chung sau:
FOR /D %variable IN (set) DO command [command-parameters]
Với biến thể này, nếu ‘set’ chứa các ký tự đại diện, thì lệnh sẽ hoạt động trên tên thư mục thay vì tên tệp. Điều này sẽ hữu ích, chẳng hạn, nếu bạn muốn sao chép một tập hợp các tệp từ cây thư mục và đặt tất cả các tệp vào một thư mục.
Ví dụ, tôi có một thư mục tên là \ Temp. Nó chứa các thư mục con được gọi là \ Temp \ Temp2 và \ Temp \ Barry. Thư mục \ Temp \ Barry và \ Temp \ Temp2 chứa các tệp tôi muốn sao chép. Nếu tôi muốn sao chép tất cả các tệp (không có cấu trúc thư mục) trong cây \ Temp vào một thư mục có tên là \ Files, tôi có thể làm như sau:
C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files
Tôi đã để lại cho đến cùng những gì tôi nghĩ là hình thức bí truyền nhất của vòng lặp FOR. Có vẻ như việc sử dụng công tắc / F sẽ cho phép bạn làm hầu hết mọi thứ — nếu bạn chỉ có thể tìm ra cách sử dụng nó. Hình thức chung là:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(Xin lỗi, tất cả không vừa trên một dòng.) Có một số ‘tùy chọn bạn có thể sử dụng và’ lệnh ‘đầu tiên (lệnh được bao quanh bởi dấu nháy đơn ngược) có thể là bất kỳ lệnh nhắc lệnh nào. Vì vậy, đây là một ví dụ về cách sử dụng cái này:
FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"
(Xin lỗi, tất cả không vừa trên một dòng.) Lệnh này thực hiện lệnh DIR / B trên C: \ Temp \ A.tmp. Đối với mỗi tệp mà nó tìm thấy, nó lặp lại tên tệp và chuyển nó tới lệnh Findstr, lệnh này sẽ tìm kiếm tất cả các dòng có chứa “a”, “b” hoặc “c”. Một điều khá kỳ quặc để làm, nhưng ít nhất nó cho thấy cách bạn có thể sử dụng / F. Tôi khuyên bạn nên thực hiện FOR /? * Để có được danh sách đầy đủ về tất cả các tùy chọn là gì và sau đó về cơ bản bạn chỉ bị ràng buộc bởi trí tưởng tượng của mình về việc tìm ra cách sử dụng nó.
Bạn cũng có thể sử dụng lệnh FOR trong một tệp hàng loạt. Điều duy nhất khác biệt là bạn nhân đôi% -sign, trong khi tại dòng lệnh, bạn chỉ sử dụng một% -sign. Ví dụ: nếu ví dụ thứ hai ở trên được đặt trong một tệp batch, nó sẽ giống như sau:
FOR /L %%i IN (1,1,5) DO @echo %%i
Mẹo này (13196) áp dụng cho Windows 7, 8 và 10.