Mẹo này tiếp tục loạt bài về cách sử dụng các tệp hàng loạt. Chúng tôi đề nghị bạn (lại) truy cập các mẹo trước để chúng tôi có thể tiếp tục nơi chúng tôi đã dừng lại. Cho đến nay, chúng ta đã đề cập đến các lệnh sau: DIR, REM, ECHO, FIND, TIME và TIMEOUT. Chúng tôi cũng đã sử dụng các toán tử sau: xuất ra tệp (>), nhận xét (: :), không có echo (@), pipe (|) và nối (&).

Cuối cùng, chúng ta biết rằng chúng ta sử dụng các tham số được truyền vào một tệp tin lô thông qua các tổ hợp% 1,% 2,% 3, v.v.

Mẹo này sẽ tập trung vào các lệnh liên quan đến việc thực hiện xử lý có điều kiện trong một tệp hàng loạt. Chúng bao gồm IF, CHOICE, GOTO và cú pháp đặc biệt của “: label”.

Tôi có một tệp hàng loạt rất tiện dụng có tên Do.bat. Nó không đơn giản chỉ là một “wrapper” chạy các chương trình bất kể các chương trình này cư trú ở đâu.

Vì vậy, ví dụ, nếu tôi muốn chạy chương trình có tên Prog1.exe, tôi chỉ cần gõ

C:\Bat> DO Prog1

Nếu tôi muốn chạy Prog2.exe, tôi sẽ gõ

C:\Bat> DO Prog2

Cái hay của Do.bat là khi tôi tạo nó, tôi đã nhập vào vị trí của tất cả các chương trình mà tôi muốn nó hoạt động. Vì vậy, tôi không cần phải nhớ, ví dụ, Prog1.exe sống ở “C: \ Programs \ My Programs \ Prog1.exe” và Prog2.exe đó sống ở “D: \ Utilities \ Barry \ Prog2.exe” . Thêm vào đó, tôi không bao giờ phải gõ lại những tên đường dẫn dài.

Tệp Do.bat của tôi trông như thế này:

@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe"

GOTO Done

:Prog2 "D:\Utilities\Barry\Prog2.exe"

GOTO Done :Done

Dòng đầu tiên của tệp đảm bảo rằng các dòng khác sẽ không được hiển thị. Tiếp theo là dòng GOTO, dòng này nhận làm tham số là tên của nhãn mà điều khiển sẽ được chuyển đến. Và điều đó xảy ra khi nhãn này cũng là tham số được chuyển cho Do.bat để bắt đầu. Vì vậy, khi bạn gọi Do.bat và chuyển “Prog1” làm tham số, tệp .bat thực hiện GOTO cho nhãn có tên “: Prog1” (chúng không phân biệt chữ hoa chữ thường). Việc thực thi theo tuần tự từ trên xuống dưới, vì vậy lệnh tiếp theo được thực thi là lệnh gọi Prog1.exe. Sau khi chương trình này kết thúc, tệp .bat tiếp tục bằng cách thực hiện lệnh “GOTO Done”. Nhãn “: Xong” là dòng cuối cùng của tệp, vì vậy khi đạt đến điểm này, tệp .bat sẽ thoát. (Có một lệnh EXIT, nhưng nếu chúng ta thực hiện lệnh đó, nó sẽ kết thúc không chỉ tệp .bat mà còn toàn bộ phiên CMD, điều này có thể không phải là điều bạn muốn.)

Ngoài ra, bạn có thể sử dụng lệnh CHOICE và có thể tạo một menu đơn giản để chọn chương trình sẽ chạy. Trong trường hợp này, tôi có thể tạo một tệp có tên Choice.bat trông giống như sau:

@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe"

GOTO Done :1 "C:\Programs\My Programs\Prog1.exe"

GOTO Done :Done

Lệnh CHOICE cung cấp cho người dùng lời nhắc nhập 1, 2 hoặc Q (theo mặc định, nó không phân biệt chữ hoa chữ thường). Mọi ký tự khác đều bị bỏ qua. Công tắc / T cho biết thời gian chờ sau 10 giây, tại thời điểm đó quy trình sẽ hoạt động như thể tùy chọn Q được chọn (/ D Q cho biết tùy chọn Mặc định là Q). Sau khi lệnh CHOICE thực thi, biến% ERRORLEVEL% được đặt thành giá trị thứ tự của tùy chọn đã chọn. Vì vậy, nếu người dùng đã chọn 1,% ERRORLEVEL% được đặt thành 1; nếu người dùng đã chọn 2,% ERRORLEVEL% được đặt thành 2; và nếu người dùng đã chọn Q,% ERRORLEVEL% được đặt thành 3. Sau đó, chúng tôi GOTO nhãn được chỉ ra bởi% ERRORLEVEL% và thực hiện hành động được yêu cầu.

Tôi có thể viết toàn bộ mẹo về lệnh IF, nhưng điều cơ bản là bạn phải làm gì đó như:

IF arg1 operator arg2 command

trong đó ‘arg1’ và ‘arg2’ là các đối số đang được kiểm tra, ‘operator’ là một trong các EQU, NEQ, LSS, LEQ, GTR, GEQ (tức là, EQUal, Not Equal, LeSS than, v.v.) và ‘command’ là một lệnh dòng lệnh.

Một tệp hàng loạt đơn giản để echo P1 nếu có một tệp có thể trông giống như sau:

@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof

(Tôi có thói quen sử dụng [] xung quanh các lập luận của mình để tránh một số phức tạp.)

Có những hương vị khác của IF nữa. Ví dụ: bạn có thể kiểm tra mức độ lỗi, kiểm tra xem tệp có tồn tại hay không, bao gồm câu lệnh ELSE, v.v.

Tại dòng lệnh, hãy thực hiện IF /? và bạn sẽ biết rõ về những gì bạn có thể làm.

Mẹo này (13185) áp dụng cho Windows 7, 8 và 10.