Tập lệnh hàng loạt - Hướng dẫn nhanh

Batch Script được kết hợp để tự động hóa các chuỗi lệnh có tính chất lặp lại. Scripting là một cách mà người ta có thể giảm bớt sự cần thiết này bằng cách tự động hóa các chuỗi lệnh này để làm cho cuộc sống của một người ở shell dễ dàng hơn và hiệu quả hơn. Trong hầu hết các tổ chức, Batch Script được kết hợp theo cách này hay cách khác để tự động hóa mọi thứ.

Một số tính năng của Batch Script là:

  • Có thể đọc đầu vào từ người dùng để có thể xử lý thêm.

  • Có cấu trúc điều khiển như chuyển đổi for, if, while, để tự động hóa và viết kịch bản tốt hơn.

  • Hỗ trợ các tính năng nâng cao như Hàm và Mảng.

  • Hỗ trợ biểu thức chính quy.

  • Có thể bao gồm các mã lập trình khác như Perl.

Một số cách sử dụng phổ biến của Batch Script là:

  • Thiết lập máy chủ cho các mục đích khác nhau.

  • Tự động hóa các hoạt động quản lý nhà như xóa các tệp không mong muốn hoặc tệp nhật ký.

  • Tự động hóa việc triển khai các ứng dụng từ môi trường này sang môi trường khác.

  • Cài đặt các chương trình trên nhiều máy cùng một lúc.

Tập lệnh hàng loạt được lưu trữ trong các tệp văn bản đơn giản chứa các dòng với các lệnh được thực thi theo trình tự, lần lượt. Các tệp này có phần mở rộng đặc biệt là BAT hoặc CMD. Các tệp thuộc loại này được nhận dạng và thực thi thông qua một giao diện (đôi khi được gọi là trình bao) được cung cấp bởi tệp hệ thống được gọi là trình thông dịch lệnh. Trên hệ thống Windows, trình thông dịch này được gọi là cmd.exe.

Chạy một tập tin hàng loạt là một vấn đề đơn giản chỉ cần nhấp vào nó. Các tệp hàng loạt cũng có thể được chạy trong dấu nhắc lệnh hoặc dòng Start-Run. Trong trường hợp này, tên đường dẫn đầy đủ phải được sử dụng trừ khi đường dẫn của tệp nằm trong môi trường đường dẫn. Sau đây là một ví dụ đơn giản về Batch Script. Batch Script này khi chạy sẽ xóa tất cả các tệp trong thư mục hiện tại.

:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR

Chương này giải thích môi trường liên quan đến Batch Script.

Viết và thực thi

Thông thường, để tạo một tệp hàng loạt, notepad được sử dụng. Đây là công cụ đơn giản nhất để tạo các tệp hàng loạt. Tiếp theo là môi trường thực thi cho các tập lệnh lô. Trên hệ thống Windows, điều này được thực hiện thông qua dấu nhắc lệnh hoặc cmd.exe. Tất cả các tệp hàng loạt được chạy trong môi trường này.

Sau đây là các cách khác nhau để khởi chạy cmd.exe:

Method 1 - Vào C: \ Windows \ System32 và nhấp đúp vào tệp cmd.

Method 2 - Thông qua lệnh chạy - Ảnh chụp nhanh sau đây cho thấy để tìm dấu nhắc lệnh (cmd.exe) trên Windows server 2012.

Khi cmd.exe được khởi chạy, bạn sẽ thấy màn hình sau. Đây sẽ là môi trường của bạn để thực thi các tập lệnh hàng loạt của bạn.

Biến môi trường

Để chạy các tệp hàng loạt từ dấu nhắc lệnh, bạn cần phải đi đến vị trí chứa tệp hàng loạt hoặc cách khác, bạn có thể nhập vị trí tệp trong biến môi trường đường dẫn. Do đó, giả sử rằng tệp loạt được lưu trữ ở vị trí C:\Application\bin, bạn sẽ cần làm theo các hướng dẫn sau để bao gồm biến PATH.

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi; C:\Application\binđến cuối biến hệ thống PATH.

Trong chương này, chúng ta sẽ xem xét một số lệnh lô thường được sử dụng.

S.Không Lệnh & Mô tả
1 VER

Lệnh lô này hiển thị phiên bản MS-DOS bạn đang sử dụng.

2 ASSOC

Đây là một lệnh hàng loạt liên kết một phần mở rộng với một loại tệp (FTYPE), hiển thị các liên kết hiện có hoặc xóa một liên kết.

3 CD

Lệnh hàng loạt này giúp thực hiện các thay đổi đối với một thư mục khác hoặc hiển thị thư mục hiện tại.

4 CLS

Lệnh hàng loạt này sẽ xóa màn hình.

5 BẢN SAO

Lệnh hàng loạt này được sử dụng để sao chép tệp từ vị trí này sang vị trí khác.

6 DEL

Lệnh hàng loạt này sẽ xóa các tệp chứ không phải thư mục.

7 DIR

Lệnh batch này liệt kê nội dung của một thư mục.

số 8 NGÀY

Lệnh lô này giúp tìm ngày hệ thống.

9 ECHO

Lệnh hàng loạt này hiển thị thông báo hoặc bật hoặc tắt lệnh lặp lại.

10 LỐI RA

Lệnh lô này thoát khỏi bảng điều khiển DOS.

11 MD

Lệnh hàng loạt này tạo một thư mục mới ở vị trí hiện tại.

12 DI CHUYỂN

Lệnh hàng loạt này di chuyển các tệp hoặc thư mục giữa các thư mục.

13 CON ĐƯỜNG

Lệnh hàng loạt này hiển thị hoặc đặt biến đường dẫn.

14 TẠM NGỪNG

Lệnh lô này sẽ nhắc người dùng và đợi một dòng đầu vào được nhập vào.

15 LỜI NHẮC

Lệnh hàng loạt này có thể được sử dụng để thay đổi hoặc đặt lại lời nhắc cmd.exe.

16 RD

Lệnh batch này sẽ xóa các thư mục, nhưng các thư mục cần phải trống trước khi có thể xóa chúng.

17 REN

Đổi tên tệp và thư mục

18 REM

Lệnh hàng loạt này được sử dụng cho các nhận xét trong các tệp hàng loạt, ngăn nội dung của nhận xét được thực thi.

19 KHỞI ĐẦU

Lệnh hàng loạt này bắt đầu một chương trình trong cửa sổ mới hoặc mở một tài liệu.

20 THỜI GIAN

Lệnh hàng loạt này đặt hoặc hiển thị thời gian.

21 KIỂU

Lệnh batch này in nội dung của một tệp hoặc các tệp vào đầu ra.

22 VOL

Lệnh hàng loạt này hiển thị các nhãn khối lượng.

23 ATTRIB

Hiển thị hoặc đặt các thuộc tính của tệp trong thư mục tháp pháo

24 CHKDSK

Lệnh lô này kiểm tra đĩa xem có bất kỳ sự cố nào không.

25 LỰA CHỌN

Lệnh hàng loạt này cung cấp một danh sách các tùy chọn cho người dùng.

26 CMD

Lệnh lô này gọi một phiên bản khác của dấu nhắc lệnh.

27 COMP

Lệnh batch này so sánh 2 tệp dựa trên kích thước tệp.

28 ĐỔI

Lệnh hàng loạt này chuyển đổi một ổ đĩa từ hệ thống tệp FAT16 hoặc FAT32 sang hệ thống tệp NTFS.

29 LÁI XE

Lệnh hàng loạt này hiển thị tất cả các trình điều khiển thiết bị đã cài đặt và thuộc tính của chúng.

30 MỞ RỘNG

Lệnh hàng loạt này sẽ trích xuất các tệp từ các tệp nội các .cab được nén.

31 TÌM THẤY

Lệnh hàng loạt này tìm kiếm một chuỗi trong tệp hoặc đầu vào, xuất ra các dòng phù hợp.

32 ĐỊNH DẠNG

Lệnh hàng loạt này định dạng đĩa để sử dụng hệ thống tệp được Windows hỗ trợ như FAT, FAT32 hoặc NTFS, do đó ghi đè lên nội dung trước đó của đĩa.

33 CỨU GIÚP

Lệnh lô này hiển thị danh sách các lệnh do Windows cung cấp.

34 IPCONFIG

Lệnh hàng loạt này hiển thị Cấu hình IP của Windows. Hiển thị cấu hình theo kết nối và tên của kết nối đó.

35 NHÃN

Lệnh hàng loạt này thêm, đặt hoặc xóa nhãn đĩa.

36 HƠN

Lệnh hàng loạt này hiển thị nội dung của một tệp hoặc các tệp, một màn hình tại một thời điểm.

37 MẠNG LƯỚI

Cung cấp các dịch vụ mạng khác nhau, tùy thuộc vào lệnh được sử dụng.

38 PING

Lệnh lô này gửi các gói ICMP / IP "echo" qua mạng đến địa chỉ được chỉ định.

39 TẮT

Lệnh hàng loạt này sẽ tắt máy tính hoặc đăng xuất người dùng hiện tại.

40 SẮP XẾP

Lệnh batch này lấy đầu vào từ một tệp nguồn và sắp xếp nội dung của nó theo thứ tự bảng chữ cái, từ A đến Z hoặc Z đến A. Nó in kết quả đầu ra trên bảng điều khiển.

41 ĐĂNG KÝ

Lệnh lô này chỉ định một ký tự ổ đĩa cho một thư mục cục bộ, hiển thị các nhiệm vụ hiện tại hoặc xóa một nhiệm vụ.

42 THÔNG TIN HỆ THỐNG

Lệnh hàng loạt này hiển thị cấu hình của một máy tính và hệ điều hành của nó.

43 NHIỆM VỤ

Lệnh hàng loạt này kết thúc một hoặc nhiều tác vụ.

44 DANH SACH CONG VIEC

Lệnh hàng loạt này liệt kê các tác vụ, bao gồm tên tác vụ và id quy trình (PID).

45 XCOPY

Lệnh hàng loạt này sao chép các tệp và thư mục theo cách nâng cao hơn.

46 CÂY

Lệnh batch này hiển thị một cây gồm tất cả các thư mục con của thư mục hiện tại ở bất kỳ mức độ đệ quy hoặc độ sâu nào.

47 FC

Lệnh hàng loạt này liệt kê sự khác biệt thực tế giữa hai tệp.

48 DISKPART

Lệnh hàng loạt này hiển thị và cấu hình các thuộc tính của phân vùng đĩa.

49 TIÊU ĐỀ

Lệnh hàng loạt này đặt tiêu đề hiển thị trong cửa sổ bảng điều khiển.

50 BỘ

Hiển thị danh sách các biến môi trường trên hệ thống hiện tại.

Trong chương này, chúng ta sẽ học cách tạo, lưu, thực thi và sửa đổi các tệp hàng loạt.

Tạo tệp hàng loạt

Các tệp hàng loạt thường được tạo trong notepad. Do đó, cách đơn giản nhất là mở notepad và nhập các lệnh cần thiết cho script. Đối với bài tập này, hãy mở notepad và nhập các câu lệnh sau.

:: Deletes All files in the Current Directory With Prompts and Warnings 
::(Hidden, System, and Read-Only Files are Not Affected) 
:: 
@ECHO OFF 
DEL . 
DR

Lưu hàng loạt tệp

Sau khi tệp hàng loạt của bạn được tạo, bước tiếp theo là lưu tệp hàng loạt của bạn. Các tệp hàng loạt có phần mở rộng là .bat hoặc .cmd. Một số quy tắc chung cần ghi nhớ khi đặt tên tệp hàng loạt -

  • Cố gắng tránh khoảng trắng khi đặt tên cho các tệp hàng loạt, đôi khi nó sẽ tạo ra sự cố khi chúng được gọi từ các tập lệnh khác.

  • Không đặt tên chúng theo các tệp hàng loạt phổ biến có sẵn trong hệ thống như ping.cmd.

Ảnh chụp màn hình ở trên cho thấy cách lưu tệp hàng loạt. Khi lưu tệp hàng loạt của bạn, một số điểm cần lưu ý.

  • Nhớ đặt .bat hoặc .cmd ở cuối tên tệp.
  • Chọn tùy chọn "Lưu dưới dạng" dưới dạng "Tất cả các tệp".
  • Đặt toàn bộ tên tệp trong dấu ngoặc kép “”.

Thực thi hàng loạt tệp

Sau đây là các bước để thực thi một tệp loạt -

  • Step 1 - Mở dấu nhắc lệnh (cmd.exe).

  • Step 2 - Chuyển đến vị trí lưu trữ tệp .bat hoặc .cmd.

  • Step 3 - Viết tên tệp như trong hình sau và nhấn nút Enter để thực thi tệp lô.

Sửa đổi hàng loạt tệp

Sau đây là các bước để sửa đổi tệp lô hiện có.

  • Step 1 - Mở cửa sổ thám hiểm.

  • Step 2 - Chuyển đến vị trí lưu trữ tệp .bat hoặc .cmd.

  • Step 3- Nhấp chuột phải vào tệp và chọn tùy chọn “Chỉnh sửa” từ menu ngữ cảnh. Tệp sẽ mở trong Notepad để chỉnh sửa thêm.

Thông thường, dòng đầu tiên trong tệp loạt thường bao gồm lệnh sau.

Lệnh ECHO

@echo off

Theo mặc định, một tệp loạt sẽ hiển thị lệnh của nó khi nó chạy. Mục đích của lệnh đầu tiên này là tắt màn hình này. Lệnh "echo off" sẽ tắt màn hình cho toàn bộ tập lệnh, ngoại trừ chính lệnh "echo off". Dấu "at" "@" phía trước cũng làm cho lệnh áp dụng cho chính nó.

Tài liệu

Các tệp hàng loạt rất thường xuyên cũng chứa các dòng bắt đầu bằng lệnh "Rem". Đây là một cách để nhập nhận xét và tài liệu. Máy tính bỏ qua bất kỳ thứ gì trên dòng theo sau Rem. Đối với các tệp hàng loạt có mức độ phức tạp ngày càng tăng, đây thường là một ý kiến ​​hay.

Chương trình tập lệnh hàng loạt đầu tiên

Hãy xây dựng chương trình tập lệnh hàng loạt đầu tiên đơn giản của chúng ta. Mở notepad và nhập các dòng mã sau. Lưu tệp dưới dạng “List.cmd”.

Đoạn mã thực hiện như sau:

  • Sử dụng lệnh tắt tiếng vọng để đảm bảo rằng các lệnh không được hiển thị khi mã được thực thi.

  • Lệnh Rem được sử dụng để thêm nhận xét để nói chính xác những gì tệp lô này thực hiện.

  • Lệnh dir được sử dụng để lấy nội dung của vị trí C: \ Program Files.

  • Lệnh '>' được sử dụng để chuyển hướng đầu ra đến tệp C: \ list.txt.

  • Cuối cùng, lệnh echo được sử dụng để cho người dùng biết rằng hoạt động đã hoàn tất.

@echo off 
Rem This is for listing down all the files in the directory Program files 
dir "C:\Program Files" > C:\lists.txt 
echo "The program has completed"

Khi lệnh trên được thực thi, tên của các tệp trong C: \ Program Files sẽ được gửi đến tệp C: \ Lists.txt và trong dấu nhắc lệnh, thông báo “Chương trình đã hoàn thành” sẽ được hiển thị.

Có hai loại biến trong tệp hàng loạt. Một là cho các tham số có thể được truyền khi tệp lô được gọi và cái còn lại được thực hiện thông qua lệnh set.

Đối số dòng lệnh

Các tập lệnh hàng loạt hỗ trợ khái niệm đối số dòng lệnh trong đó các đối số có thể được chuyển đến tệp hàng loạt khi được gọi. Các đối số có thể được gọi từ các tệp lô thông qua các biến% 1,% 2,% 3, v.v.

Ví dụ sau cho thấy một tệp loạt chấp nhận 3 đối số dòng lệnh và echo chúng vào màn hình dòng lệnh.

@echo off 
echo %1 
echo %2 
echo %3

Nếu tập lệnh hàng loạt ở trên được lưu trữ trong một tệp có tên là test.bat và chúng tôi đã chạy tập lệnh hàng loạt như

Test.bat 1 2 3

Sau đây là ảnh chụp màn hình về cách điều này sẽ trông như thế nào trong dấu nhắc lệnh khi tệp lô được thực thi.

Lệnh trên tạo ra kết quả sau.

1 
2 
3

Nếu chúng tôi chạy lô như

Example 1 2 3 4

Đầu ra sẽ vẫn giống như trên. Tuy nhiên, tham số thứ tư sẽ bị bỏ qua.

Đặt lệnh

Một cách khác mà các biến có thể được khởi tạo là thông qua lệnh 'set'. Sau đây là cú pháp của lệnh set.

Cú pháp

set /A variable-name=value

Ở đâu,

  • variable-name là tên của biến bạn muốn đặt.

  • value là giá trị cần được đặt so với biến.

  • /A – Công tắc này được sử dụng nếu giá trị cần phải là số.

Ví dụ sau đây cho thấy một cách đơn giản lệnh set có thể được sử dụng.

Thí dụ

@echo off 
set message=Hello World 
echo %message%
  • Trong đoạn mã trên, một biến có tên là message được xác định và đặt với giá trị là "Hello World".

  • Để hiển thị giá trị của biến, lưu ý rằng biến đó cần được đặt trong dấu%.

Đầu ra

Lệnh trên tạo ra kết quả sau.

Hello World

Làm việc với các giá trị số

Trong tập lệnh lô, cũng có thể xác định một biến để giữ một giá trị số. Điều này có thể được thực hiện bằng cách sử dụng công tắc / A.

Đoạn mã sau đây cho thấy một cách đơn giản trong đó các giá trị số có thể được đặt bằng công tắc / A.

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c%
  • Đầu tiên chúng ta đặt giá trị của 2 biến a và b lần lượt là 5 và 10.

  • Chúng tôi đang thêm các giá trị đó và lưu trữ trong biến c.

  • Cuối cùng, chúng ta đang hiển thị giá trị của biến c.

Đầu ra của chương trình trên sẽ là 15.

Tất cả các toán tử số học đều hoạt động trong các tệp hàng loạt. Ví dụ sau đây cho thấy các toán tử số học có thể được sử dụng trong các tệp hàng loạt.

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c% 
SET /A c = %a% - %b% 
echo %c% 
SET /A c = %b% / %a% 
echo %c% 
SET /A c = %b% * %a% 
echo %c%

Lệnh trên tạo ra kết quả sau.

15 
-5 
2 
50

Biến cục bộ so với biến toàn cầu

Trong bất kỳ ngôn ngữ lập trình nào, có một tùy chọn để đánh dấu các biến là có một số loại phạm vi, tức là phần mã mà chúng có thể được truy cập. Thông thường, biến có phạm vi toàn cục có thể được truy cập ở bất kỳ đâu từ chương trình trong khi các biến có phạm vi cục bộ có ranh giới xác định mà chúng có thể được truy cập.

Tập lệnh DOS cũng có một định nghĩa cho các biến phạm vi cục bộ và toàn cầu. Theo mặc định, các biến là chung cho toàn bộ phiên nhắc lệnh của bạn. Gọi lệnh SETLOCAL để biến cục bộ thành phạm vi tập lệnh của bạn. Sau khi gọi SETLOCAL, bất kỳ phép gán biến nào sẽ hoàn nguyên khi gọi ENDLOCAL, gọi EXIT hoặc khi việc thực thi đến cuối tệp (EOF) trong tập lệnh của bạn. Ví dụ sau cho thấy sự khác biệt khi các biến cục bộ và toàn cục được đặt trong tập lệnh.

Thí dụ

@echo off 
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

Vài điều chính cần lưu ý về chương trình trên.

  • 'Globalvar' được định nghĩa với phạm vi toàn cầu và có sẵn trong toàn bộ tập lệnh.

  • Biến 'var' được xác định trong phạm vi cục bộ vì nó nằm giữa khối 'SETLOCAL' và 'ENDLOCAL'. Do đó, biến này sẽ bị hủy ngay khi câu lệnh 'ENDLOCAL' được thực thi.

Đầu ra

Lệnh trên tạo ra kết quả sau.

13150
5

Bạn sẽ nhận thấy rằng lệnh echo% var% sẽ không mang lại kết quả gì vì sau câu lệnh ENDLOCAL, biến 'var' sẽ không còn tồn tại nữa.

Làm việc với các biến môi trường

Nếu bạn có các biến sẽ được sử dụng trên các tệp hàng loạt, thì bạn nên sử dụng các biến môi trường. Khi biến môi trường được xác định, nó có thể được truy cập thông qua dấu%. Ví dụ sau đây cho thấy cách xem JAVA_HOME được định nghĩa trên một hệ thống. Biến JAVA_HOME là một thành phần chính thường được nhiều ứng dụng sử dụng.

@echo off 
echo %JAVA_HOME%

Đầu ra sẽ hiển thị thư mục JAVA_HOME phụ thuộc từ hệ thống này sang hệ thống khác. Sau đây là một ví dụ về đầu ra.

C:\Atlassian\Bitbucket\4.0.1\jre

Luôn luôn là một phương pháp hay để thêm nhận xét hoặc tài liệu cho các tập lệnh được tạo. Điều này là cần thiết để bảo trì các tập lệnh để hiểu những gì tập lệnh thực sự làm.

Ví dụ: hãy xem xét đoạn mã sau đây không có hình thức nhận xét. Nếu bất kỳ người bình thường nào chưa phát triển kịch bản sau cố gắng hiểu kịch bản, thì người đó sẽ mất rất nhiều thời gian để hiểu kịch bản thực sự làm gì.

ECHO OFF 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
IF NOT ERRORLEVEL 1 GOTO Syntax 
IF NOT [%2]==[] GOTO Syntax 
SETLOCAL 
SET WSS= 
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"') 
DO ECHO.%%a %%A 
ENDLOCAL 
GOTO:EOF 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part 
of the computer name^(s^) to be displayed

Nhận xét sử dụng câu lệnh Rem

Có hai cách để tạo nhận xét trong Batch Script; một là thông qua lệnh Rem. Bất kỳ văn bản nào theo sau câu lệnh Rem sẽ được coi là bình luận và sẽ không được thực thi. Sau đây là cú pháp chung của câu lệnh này.

Cú pháp

Rem Remarks

trong đó 'Nhận xét' là nhận xét cần được thêm vào.

Ví dụ sau đây cho thấy một cách đơn giản Rem lệnh có thể được sử dụng.

Thí dụ

@echo off 
Rem This program just displays Hello World 
set message=Hello World 
echo %message%

Đầu ra

Lệnh trên tạo ra kết quả sau. Bạn sẽ nhận thấy rằng dòng có câu lệnh Rem sẽ không được thực hiện.

Hello World

Nhận xét bằng cách sử dụng :: Tuyên bố

Một cách khác để tạo nhận xét trong Batch Script là thông qua lệnh ::. Bất kỳ văn bản nào theo sau câu lệnh :: sẽ được coi là bình luận và sẽ không được thực thi. Sau đây là cú pháp chung của câu lệnh này.

Cú pháp

:: Remarks

trong đó 'Nhận xét' là nhận xét cần được thêm vào.

Ví dụ sau đây cho thấy cách sử dụng của lệnh "::".

Thí dụ

@echo off 
:: This program just displays Hello World 
set message = Hello World 
echo %message%

Đầu ra

Lệnh trên tạo ra kết quả sau. Bạn sẽ nhận thấy rằng dòng có câu lệnh :: sẽ không được thực thi.

Hello World

Note - Nếu bạn có quá nhiều dòng Rem, nó có thể làm chậm mã, vì cuối cùng mỗi dòng mã trong tệp lô vẫn cần được thực thi.

Hãy xem ví dụ về script lớn mà chúng ta đã thấy ở đầu chủ đề này và xem nó trông như thế nào khi tài liệu được thêm vào nó.

::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF 
:: Windows version check 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
:: Command line parameter check 
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax 
:: Keep variable local 
SETLOCAL 
:: Initialize variable 
SET WSS= 
:: Parse command line parameter 
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
:: Use NET VIEW and NBTSTAT to find computers and logged on users 
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND 
"<03>"') DO ECHO.%%a %%A 
:: Done 
ENDLOCAL
GOTO:EOF 
:Syntax 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the 
computer name^(s^) to be displayed

Bây giờ bạn có thể thấy rằng mã đã trở nên dễ hiểu hơn đối với những người dùng chưa phát triển mã và do đó dễ bảo trì hơn.

Trong DOS, một chuỗi là một tập hợp các ký tự có thứ tự, chẳng hạn như "Hello, World!".

S.Không Chuỗi & Mô tả
1 Tạo chuỗi

Một chuỗi có thể được tạo trong DOS theo cách sau.

2 Chuỗi trống

Chuỗi trống

3 Nội suy chuỗi

Nội suy chuỗi là một cách để xây dựng một giá trị Chuỗi mới từ hỗn hợp các hằng số, biến, ký tự và biểu thức bằng cách bao gồm các giá trị của chúng bên trong một ký tự chuỗi.

4 Kết nối chuỗi

Bạn có thể sử dụng toán tử set để nối hai chuỗi hoặc một chuỗi và một ký tự hoặc hai ký tự. Sau đây là một ví dụ đơn giản cho thấy cách sử dụng nối chuỗi.

5 Chiều dài chuỗi

Trong kịch bản DOS, không có hàm độ dài được định nghĩa để tìm độ dài của một chuỗi. Có các chức năng được xác định tùy chỉnh có thể được sử dụng cho cùng một. Sau đây là một ví dụ về một hàm được xác định tùy chỉnh để xem độ dài của một chuỗi.

6 toInt

Một biến đã được đặt thành chuỗi sử dụng biến tập hợp có thể được chuyển đổi thành số nguyên bằng cách sử dụng công tắc / A đang sử dụng biến tập hợp. Ví dụ sau đây cho thấy cách này có thể được thực hiện.

7 Sắp xếp đúng

Điều này được sử dụng để căn chỉnh văn bản ở bên phải, thường được sử dụng để cải thiện khả năng đọc của các cột số.

số 8 Chuỗi trái

Điều này được sử dụng để trích xuất các ký tự từ đầu của một chuỗi.

9 Chuỗi giữa

Điều này được sử dụng để trích xuất một chuỗi con thông qua vị trí của các ký tự trong chuỗi.

10 Tẩy

Tính năng thay thế chuỗi cũng có thể được sử dụng để loại bỏ một chuỗi con khỏi một chuỗi khác.

11 Loại bỏ cả hai kết thúc

Điều này được sử dụng để loại bỏ ký tự đầu tiên và ký tự cuối cùng của một chuỗi.

12 Xóa tất cả không gian

Điều này được sử dụng để loại bỏ tất cả các khoảng trắng trong một chuỗi thông qua thay thế.

13 Thay thế một chuỗi

Để thay thế một chuỗi con bằng một chuỗi khác, hãy sử dụng tính năng thay thế chuỗi.

14 Chuỗi bên phải

Điều này được sử dụng để trích xuất các ký tự từ cuối một chuỗi.

Mảng không được xác định cụ thể như một kiểu trong Batch Script nhưng có thể được triển khai. Những điều sau đây cần được lưu ý khi mảng được triển khai trong Batch Script.

  • Mỗi phần tử của mảng cần được xác định bằng lệnh set.
  • Vòng lặp 'for' sẽ được yêu cầu để lặp qua các giá trị của mảng.

Tạo một mảng

Một mảng được tạo bằng cách sử dụng lệnh đặt sau.

set a[0]=1

Trong đó 0 là chỉ số của mảng và 1 là giá trị được gán cho phần tử đầu tiên của mảng.

Một cách khác để triển khai mảng là xác định danh sách các giá trị và lặp lại qua danh sách các giá trị. Ví dụ sau đây cho thấy cách này có thể được thực hiện.

Thí dụ

@echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

Đầu ra

Lệnh trên tạo ra kết quả sau.

1
2
3
4

Truy cập Mảng

Bạn có thể truy xuất một giá trị từ mảng bằng cách sử dụng cú pháp chỉ số con, chuyển chỉ số của giá trị bạn muốn lấy trong dấu ngoặc vuông ngay sau tên của mảng.

Thí dụ

@echo off 
set a[0]=1 
echo %a[0]%

Trong ví dụ này, chỉ mục bắt đầu từ 0 có nghĩa là phần tử đầu tiên có thể được truy cập bằng chỉ mục bằng 0, phần tử thứ hai có thể được truy cập bằng chỉ mục là 1, v.v. Hãy kiểm tra ví dụ sau để tạo, khởi tạo và truy cập các mảng:

@echo off
set a[0] = 1 
set a[1] = 2 
set a[2] = 3 
echo The first element of the array is %a[0]% 
echo The second element of the array is %a[1]% 
echo The third element of the array is %a[2]%

Lệnh trên tạo ra kết quả sau.

The first element of the array is 1 
The second element of the array is 2 
The third element of the array is 3

Sửa đổi một mảng

Để thêm một phần tử vào cuối mảng, bạn có thể sử dụng phần tử tập hợp cùng với chỉ số cuối cùng của phần tử mảng.

Thí dụ

@echo off 
set a[0] = 1  
set a[1] = 2  
set a[2] = 3 
Rem Adding an element at the end of an array 
Set a[3] = 4 
echo The last element of the array is %a[3]%

Lệnh trên tạo ra kết quả sau.

The last element of the array is 4

Bạn có thể sửa đổi một phần tử hiện có của một Mảng bằng cách gán một giá trị mới tại một chỉ mục nhất định như thể hiện trong ví dụ sau:

@echo off 
set a[0] = 1 
set a[1] = 2  
set a[2] = 3 
Rem Setting the new value for the second element of the array 
Set a[1] = 5 
echo The new value of the second element of the array is %a[1]%

Lệnh trên tạo ra kết quả sau.

The new value of the second element of the array is 5

Lặp lại trên một mảng

Lặp lại một mảng có thể đạt được bằng cách sử dụng vòng lặp 'for' và đi qua từng phần tử của mảng. Ví dụ sau đây cho thấy một cách đơn giản mà một mảng có thể được triển khai.

@echo off 
setlocal enabledelayedexpansion 
set topic[0] = comments 
set topic[1] = variables 
set topic[2] = Arrays 
set topic[3] = Decision making 
set topic[4] = Time and date 
set topic[5] = Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

Những điều sau cần lưu ý về chương trình trên:

  • Mỗi phần tử của mảng cần được xác định cụ thể bằng cách sử dụng lệnh set.

  • Vòng lặp 'for' với tham số / L để di chuyển qua các phạm vi được sử dụng để lặp qua mảng.

Đầu ra

Lệnh trên tạo ra kết quả sau.

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Chiều dài của một mảng

Độ dài của mảng được thực hiện bằng cách lặp lại danh sách các giá trị trong mảng vì không có hàm trực tiếp để xác định số phần tử trong mảng.

@echo off 
set Arr[0] = 1 
set Arr[1] = 2 
set Arr[2] = 3 
set Arr[3] = 4 
set "x = 0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

Đầu ra

Đầu ra Lệnh trên tạo ra kết quả sau.

The length of the array is 4

Tạo cấu trúc trong mảng

Các cấu trúc cũng có thể được triển khai trong các tệp hàng loạt bằng cách sử dụng một chút mã hóa bổ sung để triển khai. Ví dụ sau đây cho thấy điều này có thể đạt được như thế nào.

Thí dụ

@echo off 
set len = 3 
set obj[0].Name = Joe 
set obj[0].ID = 1 
set obj[1].Name = Mark 
set obj[1].ID = 2 
set obj[2].Name = Mohan 
set obj[2].ID = 3 
set i = 0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name = %cur.Name% 
echo Value = %cur.ID% 
set /a i = %i%+1 
goto loop

Những điều chính sau đây cần được lưu ý về mã trên.

  • Mỗi biến được xác định bằng lệnh set có 2 giá trị được liên kết với mỗi chỉ số của mảng.

  • Biến i được đặt thành 0 để chúng ta có thể lặp qua cấu trúc sẽ có độ dài của mảng là 3.

  • Chúng tôi luôn kiểm tra điều kiện xem giá trị của i có bằng giá trị của len và nếu không, chúng tôi lặp lại mã.

  • Chúng tôi có thể truy cập từng phần tử của cấu trúc bằng ký hiệu obj [% i%].

Đầu ra

Lệnh trên tạo ra kết quả sau.

Name = Joe 
Value = 1 
Name = Mark 
Value = 2 
Name = Mohan 
Value = 3

Cấu trúc ra quyết định yêu cầu người lập trình chỉ định một hoặc nhiều điều kiện để được đánh giá hoặc kiểm tra bởi chương trình, cùng với một câu lệnh hoặc các câu lệnh sẽ được thực thi nếu điều kiện đó được xác định là truevà tùy chọn, các câu lệnh khác sẽ được thực thi nếu điều kiện được xác định là false.

S.Không Chuỗi & Mô tả
1 Nếu tuyên bố

Câu lệnh ra quyết định đầu tiên là câu lệnh 'if'.

2 Câu lệnh if / else

Câu lệnh ra quyết định tiếp theo là câu lệnh If / else. Sau đây là hình thức chung của tuyên bố này.

3 Câu lệnh If lồng nhau

Đôi khi, có một yêu cầu phải có nhiều câu lệnh 'if' được nhúng bên trong nhau. Sau đây là hình thức chung của tuyên bố này.

Một toán tử là một ký hiệu yêu cầu trình biên dịch thực hiện các thao tác toán học hoặc logic cụ thể.

Trong tập lệnh lô, có thể sử dụng các loại toán tử sau.

  • Toán tử số học
  • Toán tử quan hệ
  • Toán tử logic
  • Toán tử chuyển nhượng
  • Toán tử bitwise

Toán tử số học

Ngôn ngữ tập lệnh lô hỗ trợ các toán tử Số học bình thường như bất kỳ ngôn ngữ nào. Sau đây là các toán tử Số học có sẵn.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Phép cộng hai toán hạng 1 + 2 sẽ cho 3
- Trừ toán hạng thứ hai với toán hạng đầu tiên 2 - 1 sẽ cho 1
* Phép nhân của cả hai toán hạng 2 * 2 sẽ cho 4
/ Chia tử số cho mẫu số 2/3 sẽ cho 1,5
% Toán tử mô đun và phần còn lại của sau một phép chia số nguyên / float 3% 2 sẽ cho 1

Toán tử quan hệ

Toán tử quan hệ cho phép so sánh các đối tượng. Dưới đây là các toán tử quan hệ có sẵn.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
EQU Kiểm tra sự bằng nhau giữa hai đối tượng 2 EQU 2 sẽ cho đúng
NEQ Kiểm tra sự khác biệt giữa hai đối tượng 3 NEQ 2 sẽ cho đúng
LSS Kiểm tra xem đối tượng bên trái có nhỏ hơn toán hạng bên phải không 2 LSS 3 sẽ cho đúng
LEQ Kiểm tra xem đối tượng bên trái nhỏ hơn hoặc bằng toán hạng bên phải 2 LEQ 3 sẽ cho đúng
GTR Kiểm tra xem đối tượng bên trái có lớn hơn toán hạng bên phải không 3 GTR 2 sẽ đúng
GEQ Kiểm tra xem đối tượng bên trái lớn hơn hoặc bằng toán hạng bên phải 3 GEQ 2 sẽ cho đúng

Toán tử logic

Các toán tử logic được sử dụng để đánh giá các biểu thức Boolean. Sau đây là các toán tử logic có sẵn.

Ngôn ngữ batch được trang bị đầy đủ các toán tử logic Boolean như AND, OR, XOR, nhưng chỉ dành cho các số nhị phân. Không có bất kỳ giá trị nào cho TRUE hoặc FALSE. Toán tử logic duy nhất có sẵn cho các điều kiện là toán tử NOT.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả
Đây là toán tử logic "và"
HOẶC LÀ Đây là toán tử logic "hoặc"
KHÔNG PHẢI Đây là toán tử logic "không phải"

Người điều hành nhiệm vụ

Ngôn ngữ Batch Script cũng cung cấp các toán tử gán. Sau đây là các toán tử gán có sẵn.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ = Điều này thêm toán hạng bên phải vào toán hạng bên trái và gán kết quả cho toán hạng bên trái

Đặt / A a = 5

a + = 3

Đầu ra sẽ là 8

- = Thao tác này trừ toán hạng bên phải khỏi toán hạng bên trái và gán kết quả cho toán hạng bên trái

Đặt / A a = 5

a - = 3

Đầu ra sẽ là 2

* = Điều này nhân toán hạng bên phải với toán hạng bên trái và gán kết quả cho toán hạng bên trái

Đặt / A a = 5

a * = 3

Đầu ra sẽ là 15

/ = Điều này chia toán hạng bên trái với toán hạng bên phải và gán kết quả cho toán hạng bên trái

Đặt / A a = 6

a / = 3

Đầu ra sẽ là 2

% = Điều này có mô-đun sử dụng hai toán hạng và gán kết quả cho toán hạng bên trái

Đặt / A a = 5

a% = 3

Đầu ra sẽ là 2

Toán tử Bitwise

Các toán tử bitwise cũng có thể được thực hiện trong tập lệnh lô. Sau đây là các toán tử có sẵn.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả
& Đây là toán tử "và" theo bitwise
| Đây là toán tử "hoặc" theo bitwise
^ Đây là bitwise "xor" hoặc Exclusive hoặc toán tử

Sau đây là bảng sự thật hiển thị các toán tử này.

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Ngày và giờ trong DOS Scripting có hai lệnh cơ bản sau để truy xuất ngày và giờ của hệ thống.

NGÀY

Lệnh này lấy ngày hệ thống.

Cú pháp

DATE

Thí dụ

@echo off 
echo %DATE%

Đầu ra

Ngày hiện tại sẽ được hiển thị trong dấu nhắc lệnh. Ví dụ,

Mon 12/28/2015

THỜI GIAN

Lệnh này đặt hoặc hiển thị thời gian.

Cú pháp

TIME

Thí dụ

@echo off 
echo %TIME%

Đầu ra

Giờ hệ thống hiện tại sẽ được hiển thị. Ví dụ,

22:06:52.87

Sau đây là một số triển khai có thể được sử dụng để lấy ngày và giờ ở các định dạng khác nhau.

Ngày ở định dạng Năm-Tháng-Ngày

Thí dụ

@echo off 
echo/Today is: %year%-%month%-%day% 
goto :EOF 
setlocal ENABLEEXTENSIONS 
set t = 2&if "%date%z" LSS "A" set t = 1 

for /f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do ( 
   for /f "tokens = %t%-4 delims=.-/ " %%d in ('date/t') do ( 
      set %%a=%%d&set %%b=%%e&set %%c=%%f)) 
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

Đầu ra

Lệnh trên tạo ra kết quả sau.

Today is: 2015-12-30

Có ba “tệp” phổ biến để nhập bàn phím, in văn bản trên màn hình và lỗi in trên màn hình. Tệp "Standard In", được gọi làstdin, chứa đầu vào của chương trình / tập lệnh. Tệp "Chuẩn ra", được gọi làstdout, được sử dụng để ghi đầu ra để hiển thị trên màn hình. Cuối cùng, tệp “Lỗi chuẩn”, được gọi làstderr, chứa bất kỳ thông báo lỗi nào để hiển thị trên màn hình.

Mỗi trong số ba tệp tiêu chuẩn này, còn được gọi là các luồng tiêu chuẩn, được tham chiếu bằng cách sử dụng các số 0, 1 và 2. Stdin là tệp 0, stdout là tệp 1 và stderr là tệp 2.

Chuyển hướng đầu ra (Stdout và Stderr)

Một thực tế phổ biến trong các tệp hàng loạt là gửi đầu ra của một chương trình tới tệp nhật ký. Toán tử> gửi hoặc chuyển hướng, stdout hoặc stderr đến một tệp khác. Ví dụ sau đây cho thấy cách này có thể được thực hiện.

Dir C:\ > list.txt

Trong ví dụ trên, stdout của lệnh Dir C: \ được chuyển hướng đến tệp list.txt.

Nếu bạn thêm số 2 vào bộ lọc chuyển hướng, thì nó sẽ chuyển hướng stderr vào tệp danh sách.txt.

Dir C:\ 2> list.txt

Người ta thậm chí có thể kết hợp stdoutstderrluồng sử dụng số tệp và tiền tố '&'. Sau đây là một ví dụ.

DIR C:\ > lists.txt 2>&1

Ngăn chặn đầu ra chương trình

Tệp giả NUL được sử dụng để loại bỏ bất kỳ đầu ra nào khỏi chương trình. Ví dụ sau cho thấy rằng đầu ra của lệnh DIR bị loại bỏ bằng cách gửi đầu ra tới NUL.

Dir C:\ > NUL

Stdin

Để làm việc với Stdin, bạn phải sử dụng một giải pháp thay thế để đạt được điều này. Điều này có thể được thực hiện bằng cách chuyển hướng stdin của chính dấu nhắc lệnh, được gọi là CON.

Ví dụ sau đây cho thấy cách bạn có thể chuyển hướng đầu ra đến một tệp có tên là list.txt. Sau khi bạn thực hiện lệnh dưới đây, dấu nhắc lệnh sẽ lấy tất cả dữ liệu đầu vào do người dùng nhập cho đến khi nhận được ký tự EOF. Sau đó, nó sẽ gửi tất cả dữ liệu đầu vào vào tệp danh sách.txt.

TYPE CON > lists.txt

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 một tập lệnh lô trả về một 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 đã 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. Cho biết 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 đã chấm dứt 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 chạy đượ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 gần đây nhất.

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ề 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 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 là Test.bat. Lệnh trên sẽ tạo ra kết quả sau nếu tệp batch 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.

Hàm là một tập hợp các câu lệnh được tổ chức lại với nhau để thực hiện một nhiệm vụ cụ thể. Trong các tập lệnh lô, một cách tiếp cận tương tự được áp dụng để nhóm các câu lệnh logic lại với nhau để tạo thành một hàm.

Giống như bất kỳ ngôn ngữ nào khác, các hàm trong Batch Script tuân theo cùng một quy trình -

  • Function Declaration - Nó cho trình biên dịch biết về tên, kiểu trả về và các tham số của hàm.

  • Function Definition - Nó cung cấp phần thân thực tế của hàm.

Định nghĩa hàm

Trong Batch Script, một hàm được xác định bằng cách sử dụng câu lệnh nhãn. Khi một hàm mới được xác định, nó có thể lấy một hoặc một số giá trị làm 'tham số' đầu vào cho hàm, xử lý các hàm trong phần thân chính và trả lại giá trị cho các hàm dưới dạng đầu ra 'kiểu trả về'.

Mỗi hàm đều có tên hàm, tên này mô tả tác vụ mà hàm thực hiện. Để sử dụng một hàm, bạn "gọi" hàm đó bằng tên của nó và chuyển các giá trị đầu vào của nó (được gọi là các đối số) phù hợp với kiểu tham số của hàm.

Sau đây là cú pháp của một hàm đơn giản.

:function_name 
Do_something 
EXIT /B 0
  • Tên_hàm là tên được đặt cho hàm sẽ có một số ý nghĩa để phù hợp với những gì hàm thực sự làm.

  • Câu lệnh EXIT được sử dụng để đảm bảo rằng chức năng thoát đúng cách.

Sau đây là một ví dụ về một hàm đơn giản.

Thí dụ

:Display 
SET /A index=2 
echo The value of index is %index% 
EXIT /B 0
S.Không Chức năng & Mô tả
1 Gọi một hàm

Một hàm được gọi trong Batch Script bằng cách sử dụng lệnh gọi.

2 Các chức năng với các tham số

Các hàm có thể hoạt động với các tham số bằng cách chỉ cần chuyển chúng khi một lệnh gọi được thực hiện đến hàm.

3 Các chức năng có giá trị trả lại

Các hàm có thể hoạt động với các giá trị trả về bằng cách chỉ cần chuyển các tên biến

4 Biến cục bộ trong hàm

Các biến cục bộ trong hàm có thể được sử dụng để tránh xung đột tên và giữ cho các thay đổi biến cục bộ đối với hàm.

5 Các hàm đệ quy

Khả năng đóng gói hoàn toàn phần thân của một hàm bằng cách giữ các thay đổi biến cục bộ đối với hàm và ẩn đối với người gọi.

6 Tệp I / O

Trong Batch Script, bạn có thể thực hiện các thao tác nhập / xuất tệp bình thường được mong đợi bằng bất kỳ ngôn ngữ lập trình nào.

7 Tạo tệp

Việc tạo tệp mới được thực hiện với sự trợ giúp của bộ lọc chuyển hướng>. Bộ lọc này có thể được sử dụng để chuyển hướng bất kỳ đầu ra nào đến một tệp.

số 8 Ghi vào tệp

Việc ghi nội dung vào tệp cũng được thực hiện với sự trợ giúp của bộ lọc chuyển hướng>. Bộ lọc này có thể được sử dụng để chuyển hướng bất kỳ đầu ra nào đến một tệp.

9 Thêm vào tệp

Việc ghi nội dung vào tệp cũng được thực hiện với sự trợ giúp của bộ lọc chuyển hướng kép >>. Bộ lọc này có thể được sử dụng để nối bất kỳ đầu ra nào vào một tệp.

10 Đọc từ tệp

Việc đọc tệp trong tập lệnh lô được thực hiện bằng cách sử dụng lệnh vòng lặp FOR để đi qua từng dòng được xác định trong tệp cần đọc.

11 Xóa tệp

Để xóa tệp, Batch Script cung cấp lệnh DEL.

12 Đổi tên tệp

Để đổi tên tệp, Batch Script cung cấp lệnh REN hoặc RENAME.

13 Di chuyển tệp

Đối với các tệp di chuyển, Batch Script cung cấp lệnh MOVE.

14 Tệp hàng loạt - Đường ống

Toán tử ống (|) lấy đầu ra (theo mặc định, STDOUT) của một lệnh và chuyển trực tiếp nó vào đầu vào (theo mặc định, STDIN) của lệnh khác.

15 Batch Files - Đầu vào

Khi một tệp loạt được chạy, nó cung cấp cho bạn tùy chọn để chuyển các tham số dòng lệnh mà sau đó có thể được đọc trong chương trình để xử lý thêm.

16 Sử dụng toán tử SHIFT

Một trong những hạn chế của đối số dòng lệnh là nó chỉ có thể chấp nhận các đối số cho đến% 9. Hãy lấy một ví dụ về hạn chế này.

17 Thư mục

Trong Batch Script, có thể thực hiện các hoạt động dựa trên thư mục bình thường mà sẽ được mong đợi trong bất kỳ ngôn ngữ lập trình nào.

18 Tạo thư mục

Việc tạo một thư mục được thực hiện với sự hỗ trợ của lệnh MD (Tạo thư mục).

19 Nội dung thư mục liệt kê

Việc liệt kê nội dung thư mục có thể được thực hiện bằng lệnh dir. Lệnh này cho phép bạn xem các tệp và thư mục có sẵn trong thư mục hiện tại.

20 Xóa thư mục

Để xóa thư mục, Batch Scripting cung cấp lệnh DEL.

21 Đổi tên thư mục

Để đổi tên thư mục, Batch Script cung cấp lệnh REN hoặc RENAME.

22 Di chuyển thư mục

Đối với các thư mục đang di chuyển, Batch Script cung cấp lệnh MOVE.

Trong chương này, chúng ta sẽ thảo luận về các quy trình khác nhau liên quan đến Batch Script.

Xem danh sách các quá trình đang chạy

Trong Batch Script, lệnh TASKLIST có thể được sử dụng để lấy danh sách các tiến trình hiện đang chạy trong hệ thống.

Cú pháp

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
Không. Tùy chọn & Mô tả
1.

/S system

Chỉ định hệ thống từ xa để kết nối với

2.

/U

[domain\]user

Chỉ định ngữ cảnh người dùng mà lệnh sẽ thực thi.

3.

/P [password]

Chỉ định mật khẩu cho ngữ cảnh người dùng nhất định. Lời nhắc đầu vào nếu bị bỏ qua.

4.

/M [module]

Liệt kê tất cả các tác vụ hiện đang sử dụng tên exe / dll đã cho. Nếu tên mô-đun không được chỉ định, tất cả các mô-đun đã tải sẽ được hiển thị.

5.

/SVC

Hiển thị các dịch vụ được lưu trữ trong mỗi quá trình.

6.

/V

Hiển thị thông tin nhiệm vụ dài dòng.

7.

/FI filter

Hiển thị một tập hợp các nhiệm vụ phù hợp với một tiêu chí nhất định do bộ lọc chỉ định.

số 8.

/FO format

Chỉ định định dạng đầu ra. Giá trị hợp lệ: "TABLE", "LIST", "CSV".

9.

/NH

Chỉ định rằng "Tiêu đề cột" sẽ không hiển thị trong đầu ra. Chỉ hợp lệ cho các định dạng "TABLE" và "CSV".

Ví dụ

TASKLIST

Lệnh trên sẽ lấy danh sách tất cả các tiến trình đang chạy trên hệ thống cục bộ của bạn. Sau đây là một ảnh chụp nhanh của đầu ra được hiển thị khi lệnh trên được chạy như cũ. Như bạn có thể thấy từ kết quả sau, bạn không chỉ nhận được các quy trình khác nhau đang chạy trên hệ thống của mình, mà bạn còn nhận được mức sử dụng bộ nhớ của từng quy trình.

Image Name                    PID       Session Name       Session#     Mem Usage
========================= ========    ================ =========== ============
System Idle Process             0        Services            0              4 K
System                          4        Services            0            272 K
smss.exe                      344        Services            0          1,040 K
csrss.exe                     528        Services            0          3,892 K
csrss.exe                     612        Console             1         41,788 K
wininit.exe                   620        Services            0          3,528 K
winlogon.exe                  648        Console             1          5,884 K
services.exe                  712        Services            0          6,224 K
lsass.exe                     720        Services            0          9,712 K
svchost.exe                   788        Services            0         10,048 K
svchost.exe                   832        Services            0          7,696 K
dwm.exe                       916        Console             1        117,440 K
nvvsvc.exe                    932        Services            0          6,692 K
nvxdsync.exe                  968        Console             1         16,328 K
nvvsvc.exe                    976        Console             1         12,756 K
svchost.exe                  1012        Services            0         21,648 K
svchost.exe                   236        Services            0         33,864 K
svchost.exe                   480        Services            0         11,152 K
svchost.exe                  1028        Services            0         11,104 K
svchost.exe                  1048        Services            0         16,108 K
wlanext.exe                  1220        Services            0         12,560 K
conhost.exe                  1228        Services            0          2,588 K
svchost.exe                  1276        Services            0         13,888 K
svchost.exe                  1420        Services            0         13,488 K
spoolsv.exe                  1556        Services            0          9,340 K

tasklist > process.txt

Lệnh trên nhận kết quả được hiển thị bởi danh sách tác vụ và lưu nó vào tệp process.txt.

tasklist /fi "memusage gt 40000"

Lệnh trên sẽ chỉ tìm nạp những tiến trình có bộ nhớ lớn hơn 40MB. Sau đây là một đầu ra mẫu có thể được kết xuất.

Image Name                    PID      Session Name     Session#     Mem Usage
=========================   ======== ================ =========== ============
dwm.exe                        916     Console             1        127,912 K
explorer.exe                  2904     Console             1        125,868 K
ServerManager.exe             1836     Console             1         59,796 K
WINWORD.EXE                   2456     Console             1        144,504 K
chrome.exe                    4892     Console             1        123,232 K
chrome.exe                    4976     Console             1         69,412 K
chrome.exe                    1724     Console             1         76,416 K
chrome.exe                    3992     Console             1         56,156 K
chrome.exe                    1168     Console             1        233,628 K
chrome.exe                     816     Console             1         66,808 K

Giết một quy trình cụ thể

Cho phép người dùng chạy Microsoft Windows XP Professional, Windows 2003 trở lên thực hiện tác vụ từ dòng lệnh Windows bằng id quy trình (PID) hoặc tên hình ảnh. Lệnh được sử dụng cho mục đích này là lệnh TASKILL.

Cú pháp

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] 
[/PID processid | /IM imagename] } [/T] [/F]
Không. Tùy chọn & Mô tả
1.

/S system

Chỉ định hệ thống từ xa để kết nối với

2.

/U

[domain\]user

Chỉ định ngữ cảnh người dùng mà lệnh sẽ thực thi.

3.

/P [password]

Chỉ định mật khẩu cho ngữ cảnh người dùng nhất định. Lời nhắc đầu vào nếu bị bỏ qua.

4.

/FI

FilterName

Áp dụng một bộ lọc để chọn một nhóm nhiệm vụ. Cho phép "*" được sử dụng. Ví dụ. imagename eq acme * Xem các bộ lọc bên dưới để biết thêm thông tin và ví dụ.

5.

/PID

processID

Chỉ định PID của quá trình được kết thúc. Sử dụng TaskList để lấy PID.

6.

/IM

ImageName

Chỉ định tên hình ảnh của quá trình được kết thúc. Ký tự đại diện '*' có thể được sử dụng để chỉ định tất cả các nhiệm vụ hoặc tên hình ảnh.

7.

/T

Chấm dứt quá trình được chỉ định và bất kỳ quá trình con nào đã được nó bắt đầu.

số 8.

/F

Chỉ định để chấm dứt mạnh mẽ (các) quy trình.

Ví dụ

taskkill /f /im notepad.exe

Lệnh trên sẽ hủy tác vụ notepad đang mở, nếu đang mở.

taskill /pid 9214

Lệnh trên sẽ giết một tiến trình có tiến trình 9214.

Bắt đầu một quy trình mới

Tập lệnh DOS cũng có khả năng bắt đầu một quy trình mới hoàn toàn. Điều này đạt được bằng cách sử dụng lệnh START.

Cú pháp

START "title" [/D path] [options] "command" [parameters]

Trong đó

  • title - Văn bản cho thanh tiêu đề cửa sổ CMD (bắt buộc.)

  • path - Thư mục bắt đầu.

  • command - Lệnh, tệp hàng loạt hoặc chương trình thực thi để chạy.

  • parameters - Các tham số được truyền cho lệnh.

Không. Tùy chọn & Mô tả
1.

/MIN

Cửa sổ bắt đầu được Thu nhỏ

2.

/MAX

Cửa sổ bắt đầu được phóng to.

3.

/LOW

Sử dụng lớp ưu tiên IDLE.

4.

/NORMAL

Sử dụng lớp ưu tiên BÌNH THƯỜNG.

5.

/ABOVENORMAL

Sử dụng lớp ưu tiên ABOVENORMAL.

6.

/BELOWNORMAL

Sử dụng lớp ưu tiên DƯỚI ĐÂY.

7.

/HIGH

Sử dụng lớp ưu tiên CAO.

số 8.

/REALTIME

Sử dụng lớp ưu tiên REALTIME.

Ví dụ

START "Test Batch Script" /Min test.bat

Lệnh trên sẽ chạy tập lệnh loạt test.bat trong một cửa sổ mới. Các cửa sổ sẽ bắt đầu ở chế độ thu nhỏ và cũng có tiêu đề là “Test Batch Script”.

START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"

Lệnh trên sẽ thực sự chạy Microsoft word trong một quá trình khác và sau đó mở tệp TESTA.txt trong MS Word.

Bí danh có nghĩa là tạo lối tắt hoặc từ khóa cho các lệnh hiện có. Giả sử nếu chúng ta muốn thực hiện lệnh dưới đây, không có gì khác ngoài lệnh liệt kê thư mục với tùy chọn / w để không hiển thị tất cả các chi tiết cần thiết trong danh sách thư mục.

Dir /w

Giả sử nếu chúng ta tạo một phím tắt cho lệnh này như sau.

dw = dir /w

Khi chúng tôi muốn thực hiện dir /w lệnh, chúng ta có thể chỉ cần nhập từ dw. Từ 'dw' giờ đã trở thành bí danh của lệnh Dir / w.

Tạo bí danh

Bí danh được quản lý bằng cách sử dụng doskey chỉ huy.

Cú pháp

DOSKEY [options] [macroname=[text]]

Trong đó

  • macroname - Tên viết tắt của macro.

  • text - Các lệnh bạn muốn gọi lại.

Sau đây là mô tả về các tùy chọn có thể được hiển thị cho lệnh DOSKEY.

Không. Tùy chọn & Mô tả
1.

/REINSTALL

Cài đặt bản sao Doskey mới

2.

/LISTSIZE = size

Đặt kích thước của bộ đệm lịch sử lệnh.

3.

/MACROS

Hiển thị tất cả macro Doskey.

4.

/MACROS:ALL

Hiển thị tất cả các macro Doskey cho tất cả các tệp thực thi có macro Doskey.

5.

/MACROS:exename

Hiển thị tất cả các macro Doskey cho tệp thực thi đã cho.

6.

/HISTORY

Hiển thị tất cả các lệnh được lưu trong bộ nhớ.

7.

/INSERT

Chỉ định rằng văn bản mới bạn nhập sẽ được chèn vào văn bản cũ.

số 8.

/OVERSTRIKE

Chỉ định rằng văn bản mới sẽ ghi đè văn bản cũ.

9.

/EXENAME = exename

Chỉ định tệp thực thi.

10.

/MACROFILE = filename

Chỉ định một tệp macro để cài đặt.

11.

macroname

Chỉ định tên cho macro bạn tạo.

12.

text

Chỉ định các lệnh bạn muốn ghi lại.

Thí dụ

Tạo một tệp mới có tên là keys.bat và nhập các lệnh sau vào tệp. Các lệnh dưới đây tạo ra hai bí danh, một bí danh nếu dành cho lệnh cd, sẽ tự động chuyển đến thư mục được gọi là test. Và cái còn lại dành cho lệnh dir.

@echo off
doskey cd = cd/test
doskey d = dir

Sau khi thực hiện lệnh, bạn sẽ có thể chạy các bí danh này trong dấu nhắc lệnh.

Đầu ra

Ảnh chụp màn hình sau đây cho thấy rằng sau khi tệp hàng loạt đã tạo ở trên được thực thi, bạn có thể tự do nhập lệnh 'd' và nó sẽ cung cấp cho bạn danh sách thư mục có nghĩa là bí danh của bạn đã được tạo.

Xóa bí danh

Bí danh hoặc macro có thể bị xóa bằng cách đặt giá trị của macro thành NULL.

Thí dụ

@echo off
doskey cd = cd/test
doskey d = dir
d=

Trong ví dụ trên, đầu tiên chúng ta đặt macro d thành d = dir. Sau đó, chúng tôi đặt nó thành NULL. Bởi vì chúng tôi đã đặt giá trị của d thành NULL, macro d sẽ bị xóa.

Thay thế Bí danh

Bí danh hoặc macro có thể được thay thế bằng cách đặt giá trị của macro thành giá trị mong muốn mới.

Thí dụ

@echo off
doskey cd = cd/test
doskey d = dir

d = dir /w

Trong ví dụ trên, đầu tiên chúng ta đặt macro d thành d = dir. Sau đó, chúng tôi đặt nó thành dir / w. Vì chúng ta đã đặt giá trị của d thành một giá trị mới, nên bí danh 'd' bây giờ sẽ nhận giá trị mới.

Windows hiện có một thư viện cải tiến có thể được sử dụng trong Batch Script để làm việc với các thiết bị được gắn vào hệ thống. Đây được gọi là bảng điều khiển thiết bị - DevCon.exe.

Người kiểm tra và nhà phát triển trình điều khiển Windows có thể sử dụng DevCon để xác minh rằng trình điều khiển được cài đặt và định cấu hình chính xác, bao gồm tệp INF, ngăn xếp trình điều khiển, tệp trình điều khiển và gói trình điều khiển thích hợp. Bạn cũng có thể sử dụng các lệnh DevCon (bật, tắt, cài đặt, bắt đầu, dừng và tiếp tục) trong các tập lệnh để kiểm tra trình điều khiển.DevCon là một công cụ dòng lệnh thực hiện chức năng quản lý thiết bị trên máy tính cục bộ và máy tính từ xa.

Hiển thị thông tin trình điều khiển và thiết bị DevCon có thể hiển thị các thuộc tính sau của trình điều khiển và thiết bị trên máy tính cục bộ và máy tính từ xa (chạy Windows XP trở về trước) -

  • ID phần cứng, ID tương thích và ID phiên bản thiết bị. Các định danh này được mô tả chi tiết trong chuỗi nhận dạng thiết bị.

  • Các lớp thiết lập thiết bị.

  • Các thiết bị trong một lớp thiết lập thiết bị.

  • Tệp INF và tệp trình điều khiển thiết bị.

  • Chi tiết các gói tài xế.

  • Tài nguyên phần cứng.

  • Tình trạng thiết bị.

  • Ngăn xếp trình điều khiển dự kiến.

  • Gói trình điều khiển của bên thứ ba trong cửa hàng trình điều khiển.

  • Tìm kiếm thiết bị DevCon có thể tìm kiếm các thiết bị đã cài đặt và gỡ cài đặt trên máy tính cục bộ hoặc từ xa theo ID phần cứng, ID phiên bản thiết bị hoặc lớp thiết lập thiết bị.

  • Thay đổi cài đặt thiết bị DevCon có thể thay đổi trạng thái hoặc cấu hình của thiết bị Cắm và Chạy (PnP) trên máy tính cục bộ theo những cách sau:

    • Bật một thiết bị.

    • Tắt thiết bị.

    • Cập nhật trình điều khiển (tương tác và không tương tác).

    • Cài đặt thiết bị (tạo devnode và cài đặt phần mềm).

    • Xóa thiết bị khỏi cây thiết bị và xóa ngăn xếp thiết bị của nó.

    • Quét lại các thiết bị Cắm và Chạy.

    • Thêm, xóa và sắp xếp lại thứ tự ID phần cứng của các thiết bị được liệt kê gốc.

    • Thay đổi trình điều khiển bộ lọc trên và dưới cho một lớp thiết lập thiết bị.

    • Thêm và xóa các gói trình điều khiển của bên thứ ba khỏi cửa hàng trình điều khiển.

DevCon (DevCon.exe) được bao gồm khi bạn cài đặt WDK, Visual Studio và Windows SDK cho các ứng dụng máy tính để bàn. Bộ DevCon.exe có sẵn ở các vị trí sau khi được cài đặt.

%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe

Cú pháp

devcon [/m:\\computer] [/r] command [arguments]

trong đó

  • /m:\\computer- Chạy lệnh trên máy tính từ xa được chỉ định. Dấu gạch chéo ngược là bắt buộc.

  • /r- Khởi động lại có điều kiện. Chỉ khởi động lại hệ thống sau khi hoàn thành một thao tác khi cần khởi động lại để thay đổi có hiệu lực.

  • command - Chỉ định một lệnh DevCon.

  • Để liệt kê và hiển thị thông tin về các thiết bị trên máy tính, hãy sử dụng các lệnh sau:

    • DevCon HwID

    • Các lớp DevCon

    • DevCon ListClass

    • Tập tin trình điều khiển DevCon

    • DevCon DriverNodes

    • Tài nguyên DevCon

    • DevCon Stack

    • Trạng thái DevCon

    • DevCon Dp_enum

  • Để tìm kiếm thông tin về các thiết bị trên máy tính, hãy sử dụng các lệnh sau:

    • Tìm DevCon

    • DevCon FindAll

  • Để thao tác thiết bị hoặc thay đổi cấu hình của nó, hãy sử dụng các lệnh sau:

    • Bật DevCon

    • DevCon vô hiệu hóa

    • Cập nhật DevCon

    • Cập nhật DevConNI

    • Cài đặt DevCon

    • DevCon Xóa

    • DevCon Rescan

    • Khởi động lại DevCon

    • Khởi động lại DevCon

    • DevCon SetHwID

    • DevCon ClassFilter

    • DevCon Dp_add

    • DevCon Dp_delete

Ví dụ

Sau đây là một số ví dụ về cách sử dụng lệnh DevCon.

List all driver files

Lệnh sau sử dụng thao tác DevCon DriverFiles để liệt kê tên tệp của trình điều khiển mà các thiết bị trên hệ thống sử dụng. Lệnh sử dụng ký tự đại diện (*) để chỉ ra tất cả các thiết bị trên hệ thống. Bởi vì đầu ra mở rộng, lệnh sử dụng ký tự chuyển hướng (>) để chuyển hướng đầu ra tới tệp tham chiếu, driverfiles.txt.

devcon driverfiles * > driverfiles.txt

Lệnh sau sử dụng thao tác trạng thái DevCon để tìm trạng thái của tất cả các thiết bị trên máy tính cục bộ. Sau đó, nó sẽ lưu trạng thái trong tệp status.txt để ghi nhật ký hoặc xem lại sau này. Lệnh sử dụng ký tự đại diện (*) để đại diện cho tất cả các thiết bị và ký tự chuyển hướng (>) để chuyển hướng đầu ra đến tệp status.txt.

devcon status * > status.txt

Lệnh sau cho phép tất cả các thiết bị máy in trên máy tính bằng cách chỉ định lớp thiết lập Máy in trong lệnh DevCon Enable. Lệnh bao gồm tham số / r, sẽ khởi động lại hệ thống nếu cần thiết để kích hoạt có hiệu lực.

devcon /r enable = Printer

Lệnh sau sử dụng thao tác Cài đặt DevCon để cài đặt thiết bị bàn phím trên máy tính cục bộ. Lệnh này bao gồm đường dẫn đầy đủ đến tệp INF cho thiết bị (keyboard.inf) và ID phần cứng (* PNP030b).

devcon /r install c:\windows\inf\keyboard.inf *PNP030b

Lệnh sau sẽ quét máy tính để tìm thiết bị mới.

devcon scan

Lệnh sau sẽ quét lại máy tính để tìm các thiết bị mới.

devcon rescan

Registry là một trong những yếu tố quan trọng trên hệ thống windows. Nó chứa rất nhiều thông tin về các khía cạnh khác nhau của hệ điều hành. Hầu hết tất cả các ứng dụng được cài đặt trên hệ thống windows đều tương tác với sổ đăng ký ở một số dạng.

Registry chứa hai yếu tố cơ bản: khóa và giá trị. Registry keys là các đối tượng chứa tương tự như thư mục. Registry valueslà các đối tượng không chứa tương tự như tệp. Các phím có thể chứa các giá trị hoặc các khóa khác. Các phím được tham chiếu với cú pháp tương tự như tên đường dẫn của Windows, sử dụng dấu gạch chéo ngược để biểu thị các mức phân cấp.

Chương này xem xét các chức năng khác nhau như truy vấn giá trị, thêm, xóa và chỉnh sửa giá trị từ sổ đăng ký.

S.Không Các loại sổ đăng ký & mô tả
1 Đọc từ Registry

Việc đọc từ sổ đăng ký được thực hiện thông qua lệnh REG QUERY.

2 Thêm vào sổ đăng ký

Thêm vào sổ đăng ký được thực hiện thông qua lệnh REG ADD.

3 Xóa khỏi sổ đăng ký

Xóa khỏi sổ đăng ký được thực hiện thông qua lệnh REG DEL.

4 Sao chép khóa đăng ký

Sao chép từ sổ đăng ký được thực hiện thông qua lệnh REG COPY.

5 So sánh các khóa đăng ký

So sánh các khóa đăng ký được thực hiện thông qua lệnh REG COMPARE.

Tập lệnh hàng loạt có cơ sở để hoạt động với cài đặt mạng. Lệnh NET được sử dụng để cập nhật, sửa chữa hoặc xem mạng hoặc cài đặt mạng. Chương này xem xét các tùy chọn khác nhau có sẵn cho lệnh net.

S.Không Lệnh & Mô tả NET
1 TÀI KHOẢN NET

Xem mật khẩu và giới hạn đăng nhập hiện tại cho máy tính.

2 NET CONFIG

Hiển thị cài đặt máy chủ hoặc nhóm làm việc hiện tại của bạn.

3 MÁY TÍNH NET

Thêm hoặc xóa máy tính được gắn vào bộ điều khiển miền windows.

4 NGƯỜI DÙNG NET

Lệnh này có thể được sử dụng cho những việc sau

Xem chi tiết của một tài khoản người dùng cụ thể.

5 NET STOP / START

Lệnh này được sử dụng để dừng và bắt đầu một dịch vụ cụ thể.

6 THỐNG KÊ MẠNG

Hiển thị số liệu thống kê mạng của máy trạm hoặc máy chủ.

7 SỬ DỤNG NET

Kết nối hoặc ngắt kết nối máy tính của bạn khỏi tài nguyên được chia sẻ hoặc hiển thị thông tin về các kết nối của bạn.

Việc in cũng có thể được kiểm soát từ bên trong Batch Script thông qua lệnh NET PRINT.

Cú pháp

PRINT [/D:device] [[drive:][path]filename[...]]

Where / D: device - Chỉ định thiết bị in.

Thí dụ

print c:\example.txt /c /d:lpt1

Lệnh trên sẽ in tệp example.txt tới cổng song song lpt1.

Điều khiển máy in dòng lệnh

Kể từ Windows 2000, nhiều, nhưng không phải tất cả, cài đặt máy in có thể được cấu hình từ dòng lệnh của Windows bằng PRINTUI.DLL và RUNDLL32.EXE

Cú pháp

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]

Trường hợp một số tùy chọn có sẵn như sau:

  • /dl - Xóa máy in cục bộ.

  • /dn - Xóa kết nối mạng máy in.

  • /dd - Xóa trình điều khiển máy in.

  • /e - Hiển thị các tùy chọn in ấn.

  • /f[file] - Hoặc tệp inf hoặc tệp đầu ra.

  • /F[file] - Vị trí của tệp INF mà tệp INF được chỉ định với / f có thể phụ thuộc vào.

  • /ia - Cài đặt trình điều khiển máy in bằng file inf.

  • /id - Cài đặt trình điều khiển máy in bằng cách sử dụng thêm trình hướng dẫn trình điều khiển máy in.

  • /if - Cài đặt máy in bằng file inf.

  • /ii - Cài đặt máy in bằng cách sử dụng thêm trình hướng dẫn máy in với tệp inf.

  • /il - Cài đặt máy in bằng cách sử dụng thêm trình hướng dẫn máy in.

  • /in - Thêm kết nối mạng máy in.

  • /ip - Cài đặt máy in bằng trình hướng dẫn cài đặt máy in mạng.

  • /k - In trang kiểm tra đến máy in được chỉ định, không thể kết hợp với lệnh khi cài đặt máy in.

  • /l[path] - Đường dẫn nguồn driver máy in.

  • /m[model] - Tên kiểu trình điều khiển máy in.

  • /n[name] - Tên máy in.

  • /o - Hiển thị chế độ xem hàng đợi máy in.

  • /p - Hiển thị thuộc tính máy in.

  • /Ss - Lưu trữ các cài đặt máy in thành một tập tin.

  • /Sr - Khôi phục cài đặt máy in từ một tập tin.

  • /y - Đặt máy in làm mặc định.

  • /Xg - Nhận cài đặt máy in.

  • /Xs - Đặt cài đặt máy in.

Kiểm tra nếu máy in tồn tại

Có thể có những trường hợp trong đó bạn có thể được kết nối với một máy in mạng thay vì một máy in cục bộ. Trong những trường hợp như vậy, việc kiểm tra xem máy in có tồn tại ngay từ đầu hay không trước khi in luôn có lợi.

Sự tồn tại của một máy in có thể được đánh giá với sự trợ giúp của RUNDLL32.EXE PRINTUI.DLL được sử dụng để kiểm soát hầu hết các cài đặt máy in.

Thí dụ

SET PrinterName = Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q

IF EXIST "%file%" (
   ECHO %PrinterName% printer exists
) ELSE (
   ECHO %PrinterName% printer does NOT exists
)

Lệnh trên sẽ làm như sau:

  • Đầu tiên, nó sẽ đặt tên máy in và đặt tên tệp sẽ chứa các cài đặt của máy in.

  • Các lệnh RUNDLL32.EXE PRINTUI.DLL sẽ được sử dụng để kiểm tra xem máy in có thực sự tồn tại hay không bằng cách gửi cài đặt cấu hình của tệp đến tệp Prt.txt

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 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 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 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

Có thể đăng nhập trong Batch Script bằng cách sử dụng lệnh chuyển hướng.

Cú pháp

test.bat > testlog.txt 2> testerrors.txt

Thí dụ

Tạo một tệp có tên test.bat và nhập lệnh sau vào tệp.

net statistics /Server

Lệnh trên bị lỗi vì tùy chọn lệnh thống kê mạng được cung cấp sai cách.

Đầu ra

Nếu lệnh với tệp test.bat ở trên được chạy như

test.bat > testlog.txt 2> testerrors.txt

Và bạn mở file testerrors.txt lên sẽ thấy lỗi như sau.

The option /SERVER is unknown.

Cú pháp của lệnh này là:

NET STATISTICS
[WORKSTATION | SERVER]

Có thêm trợ giúp bằng cách nhập NET HELPMSG 3506.

Nếu bạn mở tệp có tên testlog.txt, nó sẽ hiển thị cho bạn nhật ký về những lệnh nào đã được thực thi.

C:\tp>net statistics /Server