Tập lệnh hàng loạt - Mã trả lại
Theo mặc định, khi thực hiện xong một dòng lệnh, nó sẽ trả về 0 khi thực thi thành công hoặc khác 0 khi thực thi không thành công. Khi tập lệnh lô trả về giá trị khác 0 sau khi thực thi không thành công, giá trị khác 0 sẽ cho biết số lỗi là gì. Sau đó, chúng tôi sẽ sử dụng số lỗi để xác định lỗi là gì và giải quyết nó cho phù hợp.
Sau đây là mã thoát phổ biến và mô tả của chúng.
Mã lỗi | Sự miêu tả |
---|---|
0 | Chương trình đã hoàn tất thành công. |
1 | Chức năng không chính xác. Cho biết rằng Hành động đã cố gắng thực thi lệnh không được nhận dạng trong dấu nhắc lệnh cmd.exe của Windows. |
2 | Hệ thống không thể tìm thấy các tập tin được chỉ định. Cho biết rằng không thể tìm thấy tệp ở vị trí đã chỉ định. |
3 | Hệ thống không thể tìm đường dẫn cụ thể. Cho biết rằng không thể tìm thấy đường dẫn được chỉ định. |
5 | Truy cập bị từ chối. Cho biết người dùng không có quyền truy cập vào tài nguyên được chỉ định. |
9009 0x2331 |
Chương trình không được nhận dạng là lệnh nội bộ hoặc lệnh bên ngoài, chương trình có thể hoạt động hoặc tệp hàng loạt. Chỉ ra rằng lệnh, tên ứng dụng hoặc đường dẫn đã bị sai chính tả khi định cấu hình Hành động. |
221225495 0xC0000017 -1073741801 |
Không đủ bộ nhớ ảo khả dụng. Nó chỉ ra rằng Windows đã hết bộ nhớ. |
3221225786 0xC000013A -1073741510 |
Ứng dụng đã kết thúc do CTRL + C. Cho biết rằng ứng dụng đã bị kết thúc bởi đầu vào bàn phím của người dùng CTRL + C hoặc CTRL + Break hoặc đóng cửa sổ nhắc lệnh. |
3221225794 0xC0000142 -1073741502 |
Ứng dụng không thể khởi chạy đúng cách. Cho biết rằng ứng dụng đã được khởi chạy trên Máy tính để bàn mà người dùng hiện tại không có quyền truy cập. Một nguyên nhân khác có thể là do gdi32.dll hoặc user32.dll không khởi tạo được. |
Mức độ lỗi
Biến môi trường% ERRORLEVEL% chứa mã trả về của chương trình hoặc tập lệnh được thực thi cuối cùng.
Theo mặc định, cách kiểm tra ERRORLEVEL là thông qua mã sau.
Cú pháp
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
Thông thường sử dụng lệnh EXIT / B% ERRORLEVEL% ở cuối tệp lô để trả về mã lỗi từ tệp lô.
EXIT / B ở cuối tệp lô sẽ ngừng thực thi tệp lô.
Sử dụng EXIT / B <exitcodes> ở cuối tệp hàng loạt để trả về mã trả hàng tùy chỉnh.
Biến môi trường% ERRORLEVEL% chứa mức lỗi mới nhất trong tệp loạt, là các mã lỗi mới nhất từ lệnh cuối cùng được thực thi. Trong tệp batch, bạn nên sử dụng các biến môi trường thay vì các giá trị không đổi, vì cùng một biến được mở rộng thành các giá trị khác nhau trên các máy tính khác nhau.
Hãy xem một ví dụ nhanh về cách kiểm tra mã lỗi từ một tệp hàng loạt.
Thí dụ
Giả sử chúng ta có một tệp batch có tên Find.cmd có mã sau. Trong đoạn mã, chúng ta đã đề cập rõ ràng rằng chúng ta nếu không tìm thấy tệp có tên list.txt thì chúng ta nên đặt mức lỗi thành 7. Tương tự, nếu chúng ta thấy rằng tệp userprofile biến không được xác định thì chúng ta nên đặt mã mức lỗi thành 9.
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
Giả sử chúng ta có một tệp khác có tên App.cmd gọi Find.cmd trước. Bây giờ, nếu Find.cmd trả về một lỗi trong đó nó đặt mức lỗi lớn hơn 0 thì nó sẽ thoát khỏi chương trình. Trong tệp lô sau, sau khi gọi tìm kiếm Find.cnd, nó thực sự kiểm tra xem mức lỗi có lớn hơn 0 hay không.
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
Đầu ra
Trong chương trình trên, chúng ta có thể có các kịch bản sau làm đầu ra:
Nếu tệp c: \ list.txt không tồn tại, thì sẽ không có gì được hiển thị trong đầu ra của bảng điều khiển.
Nếu tệp userprofile biến không tồn tại, thì sẽ không có gì được hiển thị trong đầu ra của bảng điều khiển.
Nếu cả hai điều kiện trên đều vượt qua thì chuỗi “Hoàn thành thành công” sẽ được hiển thị trong dấu nhắc lệnh.
Vòng lặp
Trong chương ra quyết định, chúng ta đã thấy các câu lệnh được thực hiện lần lượt theo cách tuần tự. Ngoài ra, việc triển khai cũng có thể được thực hiện trong Batch Script để thay đổi luồng điều khiển trong logic của chương trình. Sau đó, chúng được phân loại thành luồng báo cáo kiểm soát.
S. không | Vòng lặp & Mô tả |
---|---|
1 | Trong khi Thực hiện Tuyên bố Không có câu lệnh while trực tiếp nào có sẵn trong Batch Script nhưng chúng ta có thể thực hiện việc triển khai vòng lặp này rất dễ dàng bằng cách sử dụng câu lệnh if và các nhãn. |
2 | Đối với Tuyên bố - Triển khai Danh sách Cấu trúc "FOR" cung cấp khả năng lặp lại cho các tệp hàng loạt. Sau đây là cấu trúc phổ biến của câu lệnh 'for' để làm việc với danh sách các giá trị. |
3 | Vòng qua các dãy Câu lệnh 'for' cũng có khả năng di chuyển qua một loạt giá trị. Sau đây là hình thức chung của tuyên bố. |
4 | Cổ điển để triển khai vòng lặp Sau đây là câu lệnh cổ điển 'for' có sẵn trong hầu hết các ngôn ngữ lập trình. |
Vòng qua các đối số dòng lệnh
Câu lệnh 'for' cũng có thể được sử dụng để kiểm tra các đối số dòng lệnh. Ví dụ sau cho thấy cách sử dụng câu lệnh 'for' để lặp qua các đối số dòng lệnh.
Thí dụ
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
Đầu ra
Giả sử rằng đoạn mã trên của chúng ta được lưu trữ trong một tệp có tên Test.bat. Lệnh trên sẽ tạo ra kết quả sau nếu tệp loạt chuyển các đối số dòng lệnh 1,2 và 3 là Test.bat 1 2 3.
1
2
3
S. không | Vòng lặp & Mô tả |
---|---|
1 | Thực hiện tuyên bố giải lao Câu lệnh break được sử dụng để thay đổi luồng điều khiển bên trong các vòng lặp trong bất kỳ ngôn ngữ lập trình nào. Câu lệnh break thường được sử dụng trong các cấu trúc lặp và được sử dụng để kết thúc ngay lập tức vòng lặp bao trong cùng. |