Batch Script - Gỡ lỗi

Rất thường xuyên, bạn có thể gặp sự cố khi chạy các tệp hàng loạt và thường xuyên nhất là bạn sẽ cần phải gỡ lỗi tệp hàng loạt của mình theo cách này hay cách khác để xác định sự cố với chính tệp lô. Sau đây là một số kỹ thuật có thể giúp gỡ lỗi tệp Batch Script.

Thông báo lỗi

Để khám phá nguồn của thông báo, hãy làm theo các bước sau:

Step 1 - Loại bỏ dòng @ECHO OFF, tức là REM @ECHO OFF hoặc :: @ECHO OFF.

Step 2 - Chạy tệp loạt với các tham số dòng lệnh cần thiết, chuyển hướng tất cả đầu ra thành tệp nhật ký để so sánh sau này.

test.bat > batch.log 2>&1

Step 3 - Tìm kiếm các thông báo lỗi trong tập tin batch.log

Step 4- Kiểm tra dòng trước đó xem có bất kỳ lệnh không mong muốn hoặc không hợp lệ, (các) chuyển đổi dòng lệnh hoặc (các) giá trị nào không; đặc biệt chú ý đến giá trị của bất kỳ biến môi trường nào được sử dụng trong lệnh.

Step 5 - Sửa lỗi và lặp lại quá trình này cho đến khi tất cả các thông báo lỗi đã biến mất.

Dòng lệnh phức tạp

Một nguồn lỗi phổ biến khác là các lệnh được chuyển hướng không chính xác, chẳng hạn như lệnh FIND hoặc FINDSTR "lồng nhau" với các chuỗi tìm kiếm không chính xác, đôi khi trong vòng lặp FOR / F.

Để kiểm tra tính hợp lệ của các lệnh phức tạp này, hãy làm theo các bước sau:

Step 1 - Chèn "dòng kiểm tra lệnh" ngay trước một dòng sử dụng bộ lệnh phức tạp.

Dưới đây là một ví dụ trong đó lệnh ECHO được chèn để đánh dấu nơi kết thúc đầu ra của lệnh TYPE đầu tiên và lệnh tiếp theo bắt đầu.

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

Step 2 - Làm theo quy trình để tìm nguồn thông báo lỗi được mô tả ở trên.

Step 3- Đặc biệt chú ý đến đầu ra của các dòng lệnh “đơn giản hóa”: Đầu ra của định dạng mong đợi? Giá trị hoặc vị trí "mã thông báo" có như mong đợi không?

Chương trình con

Các chương trình con tạo ra thông báo lỗi đặt ra một "thách thức" bổ sung trong việc tìm ra nguyên nhân gây ra lỗi, vì chúng có thể được gọi nhiều lần trong cùng một tệp lô.

Để giúp tìm ra nguyên nhân gây ra lệnh gọi sai chương trình con, hãy làm theo các bước sau:

Step 1 - Thêm và đặt lại một biến bộ đếm ở đầu tập lệnh -

SET Counter = 0

Step 2 - Tăng bộ đếm mỗi khi chương trình con được gọi, bằng cách chèn dòng sau vào đầu chương trình con

SET /A Counter+=1

Step 3- Chèn một dòng khác ngay sau số tăng bộ đếm, chỉ chứa lệnh SET; điều này sẽ liệt kê tất cả các biến môi trường và giá trị của chúng.

Step 4 - Làm theo quy trình để tìm nguồn thông báo lỗi được mô tả ở trên.

Phiên bản Windows

Nếu bạn định phân phối các tệp hàng loạt của mình cho các máy tính khác có thể hoặc không chạy cùng một phiên bản Windows, bạn sẽ cần phải kiểm tra các tệp hàng loạt của mình trong càng nhiều phiên bản Windows càng tốt.

Ví dụ sau đây cho thấy cách kiểm tra các phiên bản hệ điều hành khác nhau để kiểm tra các phiên bản windows liên quan.

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only