Biến thời gian tính bằng cmd. Lấy giá trị của một biến
Môi trường shell cmd.exe được xác định bởi các biến kiểm soát hoạt động của shell và hệ điều hành.
Có thể xác định hành vi của môi trường shell hoặc toàn bộ môi trường hệ điều hành bằng cách sử dụng hai loại biến môi trường: hệ thống và cục bộ.
Các biến môi trường hệ thống xác định hành vi của môi trường hệ điều hành toàn cầu và các biến môi trường cục bộ xác định hành vi của môi trường trong một phiên bản cmd.exe nhất định.
Các biến môi trường hệ thống được đặt theo mặc định trong hệ điều hành và có sẵn cho mọi người Quy trình Windows và người dùng có đặc quyền quản trị viên có thể thay đổi các biến này. Các biến này được sử dụng phổ biến nhất trong các tập lệnh đăng nhập.
Các biến môi trường cục bộ có sẵn khi người dùng mà chúng được tạo đăng nhập. Các biến cục bộ từ trung tâm đăng ký HKEY_CURRENT_USER chỉ có giá trị đối với người dùng hiện tại nhưng xác định hành vi của môi trường hệ điều hành toàn cầu.
Danh sách các loại biến theo thứ tự ưu tiên giảm dần.
- Các biến hệ thống tích hợp
- Các biến hệ thống tổ ong đăng ký HKEY_LOCAL_MACHINE
- Các biến cục bộ của sổ đăng ký HKEY_CURRENT_USER
- Tất cả các biến môi trường và đường dẫn được liệt kê trong tệp Autoexec.bat.
- Tất cả các biến môi trường và đường dẫn được chỉ định trong tập lệnh đăng nhập (nếu có).
- Các biến được sử dụng tương tác trong tập lệnh hoặc tệp bó
Trong trình bao lệnh, mỗi phiên bản của cmd.exe kế thừa môi trường của nó ứng dụng gốc và theo đó, bạn có thể thay đổi các biến trong môi trường cmd.exe mới, điều này sẽ không ảnh hưởng đến môi trường của ứng dụng mẹ.
Đây là danh sách các biến môi trường hệ thống và cục bộ cho Windows XP.
Biến đổi |
Sự miêu tả |
|
---|---|---|
%ALLUSERSPROFILE% |
Địa phương |
Trả về vị trí của hồ sơ "Tất cả người dùng". |
Địa phương |
Trả về vị trí mặc định cho dữ liệu ứng dụng. |
|
Địa phương |
Trả về đường dẫn đến thư mục hiện tại. |
|
Địa phương |
Trả về chuỗi lệnh đã được sử dụng để khởi chạy phiên bản Cmd.exe này. |
|
Hệ thống |
Trả về số phiên bản của phần mở rộng bộ xử lý lệnh hiện tại. |
|
Hệ thống |
Trả về tên máy tính. |
|
Hệ thống |
Trả về đường dẫn đến shell lệnh đang được thực thi. |
|
Hệ thống |
Trả về dữ liệu hiện tại. Sử dụng định dạng giống như lệnh ngày/t. Được tạo bởi lệnh Cmd.exe. |
|
Hệ thống |
Trả về mã lỗi của lệnh cuối cùng được sử dụng. Giá trị khác 0 thường chỉ ra lỗi. |
|
Hệ thống |
Trả về tên ổ đĩa cục bộ trạm làm việc liên kết với thư mục chính của người dùng. Đặt dựa trên vị trí của thư mục chính. Thư mục chính của người dùng được chỉ định trong phần đính kèm " Người dùng địa phương và các nhóm." |
|
Hệ thống |
Trả về đường dẫn đầy đủ tới thư mục chính của người dùng. Đặt dựa trên vị trí của thư mục chính. Thư mục chính của người dùng được chỉ định trong phần đính vào Nhóm và Người dùng Cục bộ. |
|
Hệ thống |
Trả về đường dẫn mạng tới thư mục chính chung của người dùng. Đặt dựa trên vị trí của thư mục chính. Thư mục chính của người dùng được chỉ định trong phần đính vào Nhóm và Người dùng Cục bộ. |
|
Địa phương |
Trả về tên của bộ điều khiển miền đã xác thực phiên hiện tại. |
|
%NUMBER_OF_PROCESSORS% |
Hệ thống |
Chỉ định số lượng bộ xử lý được cài đặt trên máy tính. |
Hệ thống |
Trả về tên hệ điều hành. Tại sử dụng Windows Tên hệ điều hành 2000 xuất hiện dưới dạng Windows_NT. |
|
Hệ thống |
Chỉ định đường dẫn tìm kiếm cho Các tập tin thực thi. |
|
Hệ thống |
Trả về danh sách các phần mở rộng tệp được xem xét hệ điều hành như có thể thực thi được. |
|
%PROCESSOR_ARCHITECTURE% |
Hệ thống |
Trả về kiến trúc bộ xử lý. Giá trị: x86, IA64. |
%PROCESSOR_IDENTFIER% |
Hệ thống |
Trả về mô tả của bộ xử lý. |
%PROCESSOR_LEVEL% |
Hệ thống |
Trả về số model của bộ xử lý được cài đặt trên máy tính. |
%PROCESSOR_REVISION% |
Hệ thống |
Trả về số sửa đổi bộ xử lý. |
Địa phương |
Trả về tham số dòng lệnh cho người phiên dịch hiện tại. Được tạo bởi lệnh Cmd.exe. |
|
Hệ thống |
Trả về một số thập phân tùy ý từ 0 đến 32767. Được tạo bởi lệnh Cmd.exe. |
|
Hệ thống |
Trả về tên ổ đĩa chứa thư mục gốc của Windows XP (tức là thư mục hệ thống). |
|
Hệ thống |
Trả về vị trí của thư mục hệ thống Windows XP. |
|
Hệ thống và người dùng |
Trả về các thư mục tạm thời mặc định được sử dụng bởi các ứng dụng mà người dùng đã đăng nhập có thể truy cập được. Một số ứng dụng yêu cầu biến TEMP, số khác yêu cầu biến TMP. |
|
Hệ thống |
Trả lại thời điểm hiện tại. Sử dụng định dạng giống như lệnh thời gian/t. Được tạo bởi lệnh Cmd.exe. |
|
Địa phương |
Trả về tên miền chứa danh sách tài khoản người dùng. |
|
Địa phương |
Trả về tên của người dùng đã đăng nhập. |
|
Địa phương |
Trả về vị trí hồ sơ cho người dùng hiện tại. |
|
Hệ thống |
Trả về vị trí của thư mục hệ điều hành. |
Tại sao thế giới lại có sự hỗn loạn như vậy? Có, bởi vì quản trị viên hệ thống của chúng tôi đã quên hoàn thành nhiệm vụ của mình. Hoặc vừa mất danh sách cmd mệnh lệnh từ thế giới của chúng ta. Mặc dù đây là một cái nhìn có phần nguyên bản về trật tự hiện có của mọi thứ, nhưng nó vẫn phản ánh một phần sự thật mà chúng ta cần: bằng cách sử dụng dòng lệnh, bạn có thể dễ dàng sắp xếp trật tự cho máy tính của mình:
Dòng lệnh là gì
Dòng lệnh là công cụ đơn giản nhất để quản lý hệ điều hành máy tính của bạn. Điều khiển xảy ra bằng cách sử dụng một số lệnh và bộ ký tự dành riêng bàn phím văn bản không có chuột ( trong hệ điều hành Windows).
Trên các hệ thống dựa trên UNIX, bạn có thể sử dụng chuột khi làm việc với dòng lệnh.
Một số lệnh đến với chúng tôi từ MS-DOS. Dòng lệnh còn được gọi là console. Nó không chỉ được sử dụng để quản lý hệ điều hành mà còn để quản lý chương trình thường xuyên. Thông thường, các lệnh hiếm được sử dụng nhất đều được bao gồm trong bộ lệnh này.
Ưu điểm của việc sử dụng cmd lệnh chính là nó tiêu thụ một lượng tài nguyên hệ thống tối thiểu. Và điều này quan trọng khi tình huống khẩn cấp, khi tất cả sức mạnh của máy tính, bằng cách này hay cách khác, đều có liên quan.
cmd triển khai khả năng thực thi và tạo toàn bộ các tệp bó, Thứ tự nhất định thực hiện một số lệnh (tập lệnh). Nhờ đó, chúng có thể được sử dụng để tự động hóa một số tác vụ nhất định ( quản lý tài khoản, lưu trữ dữ liệu và hơn thế nữa).
Shell lệnh Windows để thao tác và chuyển hướng các lệnh đến một số công cụ và tiện ích hệ điều hành nhất định là trình thông dịch Cmd.exe. Nó tải bảng điều khiển và chuyển hướng các lệnh theo định dạng mà hệ thống hiểu được.
Làm việc với dòng lệnh trong hệ điều hành Windows
Bạn có thể gọi bàn điều khiển trong Windows theo nhiều cách:
![](https://i0.wp.com/internet-technologies.ru/wp-content/uploads/articles/201502/vizvat-konsol-150838.png)
Cả hai phương pháp đều liên quan đến việc chạy bảng điều khiển với tư cách là người dùng hiện tại. Nghĩa là, với tất cả các quyền và hạn chế được áp đặt đối với vai trò của nó trong hệ điều hành. Vì khởi chạy cmd với quyền quản trị viên, bạn cần chọn biểu tượng chương trình trong menu Bắt đầu và chọn mục thích hợp trong menu ngữ cảnh:
Sau khi chạy tiện ích, bạn có thể nhận được thông tin lai lịch về các lệnh và định dạng để viết chúng trong bảng điều khiển. Để thực hiện việc này, hãy nhập câu lệnh trợ giúp và nhấn “Enter”:
Các lệnh cơ bản để làm việc với tập tin và thư mục
Các lệnh được sử dụng thường xuyên nhất là:
- RENAME – đổi tên thư mục và tập tin. Cú pháp lệnh:
ĐỔI TÊN | REN [ổ đĩa/đường dẫn] tên tệp/thư mục gốc | tên tập tin cuối cùng
Ví dụ: ĐỔI TÊN C:UsershomeDesktoptost.txt test.txt
- DEL (ERASE) – chỉ dùng để xóa tập tin, không xóa thư mục. Cú pháp của nó là:
DEL | XÓA [phương pháp xử lý] [tên tệp]
Ví dụ: Del C:UsershomeDesktoptest.txt/P
Bằng phương pháp xử lý, chúng tôi muốn nói đến một lá cờ đặc biệt cho phép bạn thực hiện một điều kiện nhất định khi xóa tệp. Trong ví dụ của chúng tôi, cờ “P” cho phép hiển thị hộp thoại cấp phép để xóa từng tệp:
Bạn có thể tìm thêm thông tin chi tiết về các giá trị có thể có của tham số “phương thức xử lý” trong tài liệu kỹ thuật trên hệ điều hành Windows.
- MD – cho phép bạn tạo một thư mục theo đường dẫn đã chỉ định. Cú pháp:
MD [ổ đĩa:] [đường dẫn]
Ví dụ:
MD C:Người dùnghomeDesktoptest1test2
Ví dụ sẽ tạo thư mục con test2 trong thư mục test1. Nếu một trong các thư mục gốc của đường dẫn không tồn tại, nó cũng sẽ được tạo:
- RD ( RMDIR) – xóa một thư mục cụ thể hoặc tất cả các thư mục tại một đường dẫn cụ thể. Cú pháp:
RD | RMDIR [process_key] [ổ đĩa/đường dẫn]
Ví dụ:
rmdir /s C:UsershomeDesktoptest1test2
Ví dụ này sử dụng cờ s, điều này sẽ khiến toàn bộ nhánh thư mục được chỉ định trong đường dẫn bị xóa. Vì vậy, bạn không nên sử dụng nó một cách không cần thiết lệnh rmdir với khóa xử lý này.
Trong phần tiếp theo, chúng ta sẽ xem xét kỹ hơn các lệnh cmd mạng.
Các lệnh làm việc với mạng
Dòng lệnh cho phép bạn kiểm soát không chỉ hệ thống tập tin PC, mà còn của anh ấy các cơ hội kết nối. Phần lệnh mạng bao gồm bảng điều khiển một số lượng lớn nhà khai thác để giám sát và kiểm tra mạng. Có liên quan nhất trong số đó là:
- ping - lệnh được sử dụng để giám sát khả năng Kết nối mạng MÁY TÍNH. Một số lượng gói nhất định sẽ được gửi đến máy tính từ xa và sau đó được gửi lại cho chúng. Thời gian truyền của các gói và phần trăm tổn thất được tính đến. Cú pháp:
ping [-t] [-a] [-n bộ đếm] [-l size] [-f] [-i TTL] [-v type] [-r bộ đếm] [-s bộ đếm] [(-j Host_list | - k node_list)] [-w interval] [target_PC_name]
Ví dụ thực hiện lệnh:
ví dụ ping.microsoft.com
ping –w 10000 192.168.239.132
Trong ví dụ cuối cùng về lệnh ping cmd, yêu cầu được gửi đến người nhận bằng địa chỉ IP được chỉ định. Khoảng thời gian chờ giữa các gói là 10.000 (10 giây). Theo mặc định, tham số này được đặt thành 4000:
- tracert - được sử dụng để xác định đường dẫn mạng đến một tài nguyên được chỉ định bằng cách gửi tin nhắn echo đặc biệt thông qua giao thức
- ICMP (Giao thức tin nhắn điều khiển). Sau khi chạy lệnh với các tham số, danh sách tất cả các bộ định tuyến mà thông báo đi qua sẽ được hiển thị. Phần tử đầu tiên trong danh sách là bộ định tuyến đầu tiên ở phía tài nguyên được yêu cầu.
Cú pháp lệnh tracer cmd:
tracert [-d] [-h max_hop_number] [-j node_list] [-w interval] [target_resource_name]
Ví dụ thực hiện:
tracert -d -h 10 microsoft.com
Ví dụ này theo dõi tuyến đường tới một tài nguyên được chỉ định. Điều này làm tăng tốc độ hoạt động do sử dụng tham số d, điều này ngăn lệnh cố gắng lấy quyền đọc địa chỉ IP. Số lần chuyển tiếp (nhảy) được giới hạn ở 10 khi sử dụng đặt giá trị tham số h. Theo mặc định, số lần nhảy là 30:
![](https://i0.wp.com/internet-technologies.ru/wp-content/uploads/articles/201502/kolichestvo-prizhkov-ravn-150840.png)
tắt máy [(-l|-s|-r|-a)] [-f] [-m [\PC_name]] [-t xx] [-c “tin nhắn”] [-d[u][p]: xx:yy]
Ví dụ:
tắt máy /s /t 60 /f /l /m \191.162.1.53
PC từ xa (m) có địa chỉ IP được chỉ định (191.162.1.53) sẽ tắt (các) sau 60 giây (t). Điều này sẽ buộc bạn phải đăng xuất khỏi tất cả các ứng dụng (f) và phiên của người dùng hiện tại (l).
Trong bài viết này:
- Xác định biến
- Biến dòng lệnh (tham số lệnh gọi tệp bat)
- Toán tử có điều kiện IF
- Chức năng
- Sử dụng giá trị trả về (xử lý mã thoát)
Xác định biến
BỘ<Имяпеременной>=<Значениепеременной>
Câu lệnh SET là phần mở rộng khả năng thao tác các tham số của hệ điều hành. Nó chỉ định một biến có giá trị được thay thế cho tên của nó bất cứ khi nào tên đó được sử dụng giữa các dấu phần trăm. Vì vậy, nếu được đặt (một biến mà nhiều trò chơi sử dụng card âm thanh máy tính):
BỘ BLASTER=A220 I5 D1 P330
sau đó khi sử dụng cấu trúc sau trong một tệp bó:
Tiếng vang %BLASTER%
"A220 I5 D1 P330" sẽ được hiển thị trên màn hình. Các biến được xác định bằng câu lệnh SET được gọi là biến môi trường và hiển thị sau khi thực thi cho đến khi DOS được khởi động lại (trừ khi được thay đổi thủ công trong bộ nhớ). Tức là nó có thể được sử dụng từ một tập tin hàng loạt hoặc các chương trình nối tiếp một nhiệm vụ trong một nhiệm vụ khác. Nổi tiếng nhất là biến PATH, là một tập hợp các đường dẫn cho tìm kiếm nhanh các tập tin. Nó được đặt trong tệp autoexec.bat.
Biến dòng lệnh
(tham số để gọi tập tin bat)
%<цифра 0-9>
Như trong bất kỳ ngôn ngữ nào, trong ngôn ngữ tệp bó, có thể sử dụng các biến nhận được làm tham số của tệp bat.
Có thể có tổng cộng 10 biến độc lập tồn tại đồng thời. Để viết chương trình phức tạpđiều này khá nhỏ mặc dù đối với công việc thường xuyên Thường thì 3-4 là đủ. Giá trị của biến bằng giá trị của tham số tương ứng từ dòng lệnh. Biến %0 sẽ chứa tên của tệp .bat và đường dẫn đến nó nếu bạn chỉ định. Nghĩa là, nếu bạn chạy tệp abc.bat với các tham số sau:
abc.bat a bc def
thì biến %0 sẽ chứa giá trị abc.bat , %1 sẽ chứa giá trị a , %2 sẽ chứa bc và %3 sẽ chứa def . Thuộc tính này được sử dụng rộng rãi để tạo các tệp bó linh hoạt khi xử lý các hoạt động lặp đi lặp lại.
Để nhận được hơn 10 biến từ dòng lệnh, bạn có thể sử dụng lệnh SHIFT.
Lệnh SHIFT cho phép bạn sử dụng nhiều hơn 10 tham số dòng lệnh, tuy nhiên các tham số tương ứng trước đó sẽ bị mất. Nói cách khác, lệnh SHIFT dịch chuyển tất cả các giá trị biến sang trái một bước. Nghĩa là, biến %0 sẽ chứa giá trị trước đó có trong biến %1 và biến %1 sẽ chứa giá trị của biến %2 trước khi chuyển đổi. Tuy nhiên, thao tác này là không thể đảo ngược, nghĩa là không thể dịch chuyển các biến trở lại.
Toán tử có điều kiện IF
May mắn thay, thông dịch lệnh cmd.exe trong Windows 2000 hiện đại trở lên hỗ trợ các khối lệnh trong cấu trúc phân nhánh, loại bỏ nhu cầu sử dụng IF với nhãn. Các khối lệnh được đặt trong dấu ngoặc đơn. Nó trông như thế này (bắt chước kiểu thụt lề C/C++):
điều kiện nếu (
Lệnh Rem của nhánh 'then'
Rem...
) khác (
Lệnh Rem của nhánh 'khác'
Rem...
Ví dụ cụ thể sử dụng:
@echo tắt
đặt BUILDMODE=%1
nếu "%BUILDMODE%" == "" (
Echo FAIL: Cần phải có đối số ^(--debug, --release^)
Thoát /b 1
rem Xóa tất cả dấu gạch nối khỏi đối số để đơn giản hóa việc xử lý
đặt BUILDMODE=%BUILDMODE:-=%
if "%BUILDMODE%" == "gỡ lỗi" (
Đặt CCFLAGS=/Od /MDd /Z7
) khác (
Đặt CCFLAGS=/O2 /MD
Theo tôi, điều này hoàn toàn có thể chấp nhận được. Nhưng, như mọi khi, cuộc sống không đơn giản như người ta tưởng. Có một vấn đề. Các biến được sử dụng trong khối then và else được mở rộng trước khi khối bắt đầu thực thi, không phải trong khi thực thi. Trong ví dụ trên, điều này không gây ra bất kỳ vấn đề nào, nhưng trong ví dụ sau nó sẽ:
if "%BUILDMODE%" == "gỡ lỗi" (
Echo INFO: Đặt chế độ môi trường gỡ lỗi
Đặt OPTFLAGS=/Od
Đặt CCFLAGS=%OPTFLAGS% /MDd /Z7
) khác (
Echo INFO: Đặt chế độ phát hành môi trường
Đặt OPTFLAGS=/O2
Đặt CCFLAGS=%OPTFLAGS% /MD
Điều đáng chú ý là trong cả hai khối, việc thay thế biến OPTFLAGS sẽ xảy ra trước khi nó được thay đổi trong quá trình thực thi khối đó. Theo đó, CCFLAGS sẽ chứa đầy giá trị mà OPTFLAGS có tại thời điểm thực hiện khối này nếu bắt đầu.
Vấn đề này được giải quyết bằng cách sử dụng việc mở rộng biến bị trì hoãn. Các biến có trong !…! thay vì %...% , ý nghĩa của chúng sẽ chỉ được tiết lộ tại thời điểm sử dụng trực tiếp. Chế độ này bị tắt theo mặc định. Bạn có thể kích hoạt nó bằng cách sử dụng nút chuyển /V:ON khi gọi cmd.exe hoặc bằng cách sử dụng lệnh:
trong văn bản của chính tập tin bat. Phương pháp thứ hai có vẻ thuận tiện hơn đối với tôi - không hay lắm khi yêu cầu ai đó chạy tập lệnh của bạn với một tham số nhất định.
Như đã nói, ví dụ "sai" trước đó có thể được sửa như thế này:
setlocal kích hoạtelayedmở rộng
if "%BUILDMODE%" == "gỡ lỗi" (
Echo INFO: Thiết lập môi trường chế độ gỡ lỗi
Đặt OPTFLAGS=/Od
Đặt CCFLAGS=!OPTFLAGS! /MDd /Z7
) khác (
Echo INFO: Thiết lập môi trường chế độ phát hành
Đặt OPTFLAGS=/O2
Đặt CCFLAGS=!OPTFLAGS! /MD
Bây giờ đây gần như là một khối if-then-else chính thức. Hầu như, bởi vì nếu trong một trong các lệnh echo bạn gặp phải lỗi đóng dấu ngoặc đơn, thì bạn cần phải thoát nó bằng ký tự ^, nếu không trình phân tích cú pháp sẽ bị nhầm lẫn...
Nhưng trong mọi trường hợp, điều này tốt hơn nhiều so với số lượng thẻ và chuyển tiếp điên cuồng.
Chức năng
Có thể tạo một hàm trong tệp bat không? Vâng, bạn có thể. Hơn nữa, đôi khi nó thậm chí còn cần thiết. Đúng, đây có thể được gọi là các hàm có điều kiện.
Có một cú pháp đặc biệt cho lệnh gọi, cho phép bạn đi đến một điểm trong cùng một tệp dơi, ghi nhớ địa điểm nơi cuộc gọi này được thực hiện:
gọi: đối số nhãn
Hàm được trả về bằng lệnh:
thoát /b [mã trả về tùy chọn]
Phím /b ở đây rất quan trọng: nếu không có nó, bạn sẽ thoát không phải chức năng mà là tập lệnh nói chung.
Để biết chi tiết, gõ vào dòng lệnh:
gọi/?
lối ra /?
Điều thú vị là lệnh gọi với cú pháp này hỗ trợ các cuộc gọi đệ quy với tạo tự động khung mới cho các đối số biến %0-%9. Đôi khi điều này có thể hữu ích. Đây là một ví dụ cổ điển về tính toán giai thừa đệ quy trong ngôn ngữ lệnh:
@echo tắt
gọi: giai thừa %1
tiếng vang %KẾT QUẢ%
lối ra
rem Hàm tính giá trị giai thừa
đăng nhập lại:
rem %1 Số mà bạn muốn tính giai thừa
rem Đầu ra:
rem %RESULT% Giá trị giai thừa
:yếu tố
nếu %1 == 0 (
Đặt KẾT QUẢ=1
Thoát /b
nếu %1 == 1 (
Đặt KẾT QUẢ=1
Thoát /b
đặt /a PARAM=%1 - 1
gọi: giai thừa %PARAM%
đặt /a KẾT QUẢ=%1 * % KẾT QUẢ%
thoát /b
Ví dụ về công việc:
> giai thừa.bat 10
3628800
Sử dụng giá trị trả về
(xử lý mã thoát chương trình)
Khi bất kỳ chương trình nào hoàn thành công việc của mình, nó sẽ trả về mã kết thúc cho hệ điều hành. Theo thông lệ, trả về 0 sau khi hoàn thành thành công, nếu không thì sẽ có mã lỗi. Đôi khi, hoặc khá thường xuyên, một chương trình "cố ý" trả về giá trị khác 0 để một số chi tiết về hoạt động của nó có thể được "học" trong tệp bó. Ví dụ: chương trình trả về mã của phím được nhấn và tệp .bat thực hiện nhiều hành động khác nhau dựa trên nó.
Làm cách nào một tệp bó có thể tìm ra mã thoát của chương trình đã thực thi? Biến khóa ERRORLEVEL được cung cấp cho mục đích này.
Ví dụ về tệp bó có mức lỗi:
@ECHO TẮT
REM Chạy chương trình prg1.exe
PRG1.EXE
Phân tích mã hoàn thành REM
NẾU LỖI CẤP ĐỘ 2 GOTO TÌM HIỂU TỆP
NẾU LỖI 1 GOTO VIẾT LỖI
NẾU LỖI 0 GOTO EXITOK
GOTO ONEXIT
: KHÔNG TÌM THẤY TỆP
Lỗi ECHO! Không tìm thấy tập tin!
GOTO ONEXIT
:VIẾT SAI
Lỗi ghi ECHO!
GOTO ONEXIT
:EXITOK
ECHO Chương trình đã được hoàn thành thành công.
GOTO ONEXIT
:ONEXIT
Xin lưu ý rằng việc phân tích mã thoát không bắt đầu từ số 0 mà từ giá trị tối đa có thể. Thực tế là việc kiểm tra như vậy có nghĩa là: “nếu mức lỗi lớn hơn hoặc bằng giá trị thì…”. Nghĩa là, nếu chúng ta kiểm tra bắt đầu từ 0, thì mọi giá trị ở dòng đầu tiên sẽ đúng, giá trị này sẽ không chính xác.
Đây là sai lầm phổ biến nhất trong loại này các chương trình.
0.00 (1 )
Cách tiếp cận chung.
Các tập tin lệnh được tập tin văn bản với phần mở rộng con dơi hoặc cmd, có dòng biểu thị các lệnh hoặc tên của các tệp thực thi. Khi bạn chạy một tệp bó, quyền kiểm soát sẽ được bộ xử lý lệnh của hệ điều hành (thường được gọi là trình thông dịch lệnh) đảm nhiệm, bộ xử lý này sẽ đọc và giải thích tuần tự các dòng trong tệp bó. Đối với Windows9X việc này được thực hiện lệnh.com, cho WinNT/2K/XP - cmd.exe. Các dòng tệp hàng loạt có thể chứa các lệnh từ chính bộ xử lý lệnh (FOR, GOTO, IF, v.v.) hoặc tên của các mô-đun thực thi (net.exe, regedit.exe, win.com, v.v.). Trong hệ điều hành WinNT/2K/XP, bạn có thể nhận trợ giúp ngắn gọn về thành phần lệnh bằng dòng lệnh:
hoặc bằng lệnh cụ thể:
TRỢ GIÚP Tên lệnh
Để hiển thị văn bản trợ giúp không phải trên màn hình mà trong một tệp, bạn có thể sử dụng chuyển hướng đầu ra . Khi sử dụng dòng lệnh, thiết bị tiêu chuẩn Thiết bị đầu vào là bàn phím và thiết bị đầu ra là màn hình, tuy nhiên các thiết bị này có thể được ánh xạ lại bằng các ký tự chuyển hướng
< - chuyển hướng đầu vào
> - chuyển hướng đầu ra (hoặc > > - chuyển hướng đến tập tin hiện có, khi dữ liệu đầu ra được thêm vào cuối tệp.)
Để xuất luồng dữ liệu lệnh
GIÚP ĐỠtrong file help.txt dòng lệnh sẽ như sau:TRỢ GIÚP > help.txt
Để hiển thị trợ giúp cho lệnh GOTO trong tệp goto.txt:
GIÚP GOTO > goto.txt
Sử dụng các biến môi trường.
TRONG tập tin hàng loạt có thể và thường nên được sử dụng biến môi trường - các biến có giá trị đặc trưng cho môi trường mà lệnh hoặc tệp bó được thực thi. Các giá trị của biến môi trường được tạo khi hệ điều hành khởi động và người dùng đăng ký vào hệ thống và cũng có thể được đặt bằng lệnhBỘ, định dạng của nó là:
SET [biến=[chuỗi]]
Biến đổi Tên biến môi trường.
đường kẻ Một chuỗi ký tự được gán cho biến được chỉ định.
Ví dụ, dòng lệnh
SET mynane=Vasya
sẽ thêm một biến myname lấy giá trị Vasya.
Bạn có thể lấy giá trị của một biến trong các chương trình và tệp bó bằng cách sử dụng tên của nó được bao quanh bởi các dấu phần trăm ( %) . Ví dụ như lệnh
sẽ hiển thị thời gian từ và lệnh
sẽ hiển thị giá trị của biến thời gian, biến này lấy giá trị của thời gian hiện tại.
Và dòng lệnh
SET PATH=C:myprog;%path%
sẽ thêm vào đường dẫn tìm kiếm chương trình thực thi, được mô tả bằng giá trị biến PATH thư mục C:myprog
Thực hiện lệnh SET không có tham số khiến giá trị hiện tại của các biến được hiển thị trên màn hình, dưới dạng:
NUMBER_OF_PROCESSORS=1 - số lượng bộ xử lý
OS=Windows_NT - Loại hệ điều hành
Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - đường dẫn tìm kiếm các tập tin thực thi.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - phần mở rộng cho các tệp thực thi.
PROCESSOR_ARCHITECTURE=x86 - kiến trúc bộ xử lý.
PROCESSOR_IDENTIFIER=x86 Dòng 6 Model 8 Bước 1, AuthenticAMD - mã định danh bộ xử lý.
PROCESSOR_LEVEL=6 - cấp độ bộ xử lý (số kiểu máy).
PROCESSOR_REVISION=0801 - phiên bản bộ xử lý.
ProgramFiles=E:Program Files - đường dẫn đến thư mục "Program Files"
PROMPT=$P$G - định dạng dấu nhắc dòng lệnh $P - đường dẫn cho thư mục hiện tại $G - dấu ">".
SystemDrive=E: - chữ cái đĩa hệ thống.
SystemRoot=E:WINDOWS - thư mục hệ điều hành Windows.
Giá trị của một số biến không được lệnh SET trả về. Đây là các biến có giá trị thay đổi linh hoạt:
%CD% - Lấy giá trị của chuỗi thư mục hiện tại.
%DATE% - Chấp nhận một giá trị ngay hiện tại.
%TIME% - Chấp nhận giá trị thời gian hiện tại.
%RANDOM% - Lấy giá trị ngẫu nhiên số thập phân trong phạm vi 1 -32767.
%ERRORLEVEL% - Chấp nhận giá trị hiện tại của mã thoát của tác vụ ERRORLEVEL
%CMDEXTVERSION% - Lấy giá trị của phiên bản bộ xử lý lệnh CMD.EXE để xử lý lệnh mở rộng.
%CMDCMDLINE% - Lấy giá trị của dòng được gọi là shell.
Bạn có thể sử dụng dòng lệnh để xem giá trị của một biến:
ECHO %biến%
Tham số đầu vào cho tệp bó.
Có thể truyền các tham số dòng lệnh vào một tệp lệnh và sử dụng các giá trị của chúng trong các câu lệnh trong chính tệp lệnh đó.
tập tin BAT< параметр1 > , < параметр2 >, ... < параметрN >
Trong chính tệp bó, tham số đầu tiên sẽ có sẵn dưới dạng một biến %1 , thứ hai - %2 và như thế. Tên của tệp bó có sẵn dưới dạng một biến %0 . Ví dụ: hãy tạo một tệp bó có nhiệm vụ hiển thị các giá trị của các tham số đã nhập trên màn hình. Thông thường lệnh dùng để hiển thị văn bản là
tiếng vang< текст >
Tuy nhiên, nếu văn bản được thay thế bằng %1 thì tham số đầu tiên sẽ được trả về, với %2 - tham số thứ hai, v.v.
Tạo tệp parm.bat có nội dung sau:
echo Tham số đầu tiên=%1
echo Tham số thứ hai=%2
echo Tham số thứ ba = %3
và chạy nó bằng lệnh sau:
parm.bat giây đầu tiên “hai từ”
sau khi thực hiện nó, bạn sẽ hiểu nó hoạt động như thế nào và các tham số có dấu cách phải được đặt trong dấu ngoặc kép. Để quá trình xử lý bộ xử lý lệnh dòng không được hiển thị trên màn hình, bạn có thể sử dụng lệnh
TẮT ECHO, đặt nó trên dòng đầu tiên của tệp bó. Để tạo một dòng trong tệp bó bị shell bỏ qua, hãy đặt nó ở đầu dòngR.E.M.< пробел > . Bằng cách này, bạn có thể đặt nhận xét, thường hữu ích trong các tệp bó lớn:rem ECHO OFF tắt chế độ hiển thị nội dung các dòng file lệnh trên màn hình
REM sẽ chỉ hiển thị kết quả thực hiện của chúng.
echo Tham số đầu tiên=%1
echo Tham số thứ hai=%2
echo Tham số thứ ba = %3
Hãy thử thay thế ECHO OFF bằng @ECHO OFF - kết quả đã nói lên điều đó. Dòng tắt chế độ đầu ra không còn hiển thị trên màn hình.
Chuyển tiếp và nhãn.
Trong các tệp bó, bạn có thể sử dụng các lệnh nhảy có điều kiện để thay đổi logic hoạt động của chúng tùy thuộc vào việc đáp ứng các điều kiện nhất định. Để minh họa cách sử dụng các bước nhảy có điều kiện, hãy tạo một tệp bó với mục đích là gán ký tự ổ đĩa được xác định trước cho phương tiện di động, sẽ là ổ đĩa flash. Các điều kiện như sau - có 2 ổ đĩa flash, một trong số đó sẽ hiển thị trong Explorer dưới dạng ổ X: và ổ thứ hai - dưới dạng ổ Y: bất kể ổ nào cổng USB chúng được kết nối. Chúng ta sẽ cho rằng bánh xe thật có thể được kết nối dưới dạng F: hoặc G: Chúng tôi sẽ xác định các đĩa bằng sự hiện diện của một tệp có tên nhất định (tốt hơn là đặt một tệp như vậy ẩn trong thư mục gốc và gọi nó là một cái gì đó bất thường):
Flashd1.let - trên đĩa đầu tiên
Flashd2.let - vào ngày thứ hai
Những thứ kia. Mục đích của tệp bó là kiểm tra sự hiện diện của đĩa rời F: Và G: các tập tin Flashd1.let hoặc Flashd2.let và, tùy thuộc vào cái nào hiện diện, gán ký tự ổ đĩa X: hoặc Y:
Để tìm kiếm file trên đĩa, sử dụng lệnh
NẾU TỒN TẠI:Lệnh tên tệp IF EXIST
Cách dễ nhất để sử dụng nó như một lệnh làĐĂNG KÝ, khớp với tên ổ đĩa và thư mục.
ĐẠI X: C: - tạo ra đĩa ảo X:, nội dung của nó sẽ là thư mục gốc của ổ C:
Tạo một tệp bó setXY.bat với các dòng sau:
Sau khi thực thi một tệp như vậy, bạn sẽ có các ổ X: và Y: Nhưng nếu bạn thực thi lại tệp đó, lệnh SUBST sẽ hiển thị thông báo lỗi - xét cho cùng, các ổ X: và Y: đã tồn tại.
Bạn nên bỏ qua việc thực thi SUBST nếu các đĩa ảo X: và Y: đã được tạo (hoặc xóa chúng bằng SUBST với tùy chọn -d trước khi gắn). Sửa đổi tệp bó bằng cách sử dụngĐI ĐẾN- chuyển điều khiển sang một dòng của tệp bó theo nhãn.
nhãn GOTO
Nhãn phải nằm trên một dòng riêng biệt và bắt đầu bằng dấu hai chấm. Hãy thực hiện các thay đổi đối với tệp bó của chúng tôi để không nhận được thông báo lỗi:
REM nếu X không tồn tại - sau đó chuyển đến nhãn SETX
NẾU KHÔNG Tồn Tại X: GOTO SETX
REM nếu X tồn tại: - hãy chuyển sang kiểm tra sự hiện diện của Y:
NẾU Tồn tại G:flashd1.let SUBST X: G:
NẾU Tồn tại F:flashd1.let SUBST X: F:
REM nếu Y: tồn tại - hoàn thành tệp bó.
NẾU TỒN TẠI Y: GOTO EXIT
NẾU Tồn tại G:flashd2.let SUBST Y: G:
NẾU Tồn tại F:flashd2.let SUBST Y: F:
Thoát REM từ tệp bó
Thông báo lỗi SUBST đã biến mất. Dấu hiệu lỗi khi thực thi lệnh có thể được theo dõi trong chính tệp lệnh bằng cách phân tích biếnLỖI, giá trị của nó được hình thành trong quá trình thực hiện hầu hết các chương trình. ERRORLEVEL là 0 nếu chương trình hoàn thành không có lỗi và 1 nếu xảy ra lỗi. Có thể có các giá trị khác nếu chúng được cung cấp trong chương trình thực thi.
Bạn cũng có thể sử dụng tệp bó làm lệnh trên một dòng trong tệp bó. Ngoài ra, để chuyển và quay trở lại điểm thực hiện tệp bó đang gọi, lệnh được sử dụngGỌI. Hãy tạo một tệp lệnh test.bat với nội dung sau:
Cuộc gọi ECHO 1.bat
Trả lại ECHO.
Và một file 1.bat chứa lệnhTẠM NGỪNG,tạm dừng việc thực thi một tệp bó cho đến khi nhấn bất kỳ phím nào.
Khi thực thi test.bat sẽ hiển thị thông báo trên màn hình
Gọi 1.bat
và quyền điều khiển sẽ được trao cho 1.bat bằng lệnh tạm dừng. Sau khi nhấn một phím trên bàn phím, dòng lệnh “ECHO Return” sẽ được điều khiển. và nó sẽ được hiển thị trên màn hình
Nếu bạn xóa CALL khỏi test.bat thì việc trả về từ tệp 1.bat sẽ không được thực hiện. Nhân tiện, bằng cách chuyển điều khiển sang một tệp bó, bạn có thể sắp xếp nó thành vòng lặp. Hãy thử thêm dòng sau vào cuối tệp test.bat:
Bạn có thể thoát khỏi vòng lặp tệp bó bằng cách nhấn tổ hợp CTRL-Break. Có thể sử dụng lệnh CALL để gọi một thủ tục trong một tệp bó. Trong trường hợp này, tên không được sử dụng làm đối số tập tin bên ngoài, và nhãn:
....
gọi: proc1
....
:proc1
....
lối ra
....
Tạo tập tin.
Không có trên Windows đội đặc biệtđể tạo một tệp, nhưng bạn có thể dễ dàng thực hiện mà không cần nó theo một số cách:
Sao chép từ bảng điều khiển sang tập tin
SAO CHÉP CON myfile.txt
Khi lệnh này được thực thi, dữ liệu từ bàn phím (thiết bị CON) sẽ được ghi vào file myfile.txt. Nhấn F6 hoặc Kết hợp CTRL-Z sẽ hoàn thành đầu ra.
Chuyển hướng đầu ra
ECHO 1 > myfile.txt
Chạy lệnh này sẽ tạo ra file myfile.txt chứa ký tự “1”
Kết hợp chuyển hướng đầu vào và đầu ra:
SAO CHÉP CON > myfile.txt< xyz
Khi thực hiện lệnh này, như trong trường hợp đầu tiên, việc sao chép từ bảng điều khiển sang tệp được sử dụng, nhưng thay vì nhập từ bàn phím, nhập từ thiết bị không tồn tại xyz được sử dụng. Hệ thống sẽ hiển thị thông báo cho biết thiết bị đó không tồn tại nhưng tệp trống myfile.txt sẽ được tạo thành công.
Một lựa chọn rất đơn giản là sao chép từ một thiết bị hư cấu có tên không có gì nộp.
sao chép null myfile.txt
Nếu bạn thường xuyên cần tạo các tệp trống, bạn có thể chuẩn bị tệp bó của riêng mình (ví dụ - newfile.bat hoặc thậm chí tốt hơn - nf.bat) và đặt tên tập tin đã tạo chuyển nó dưới dạng tham số khi khởi động.
Nội dung tập tin:
Đặt tệp bó này vào thư mục hệ thống của bạn (C:windowssystem32 hoặc bất cứ thứ gì có trong đường dẫn tìm kiếm PATH của bạn).
Dòng lệnh:
newfile.bat myfile.txt
Hoặc
nf.bat myfile.txt
Hoặc
nf myfile.txt
Đây là đội của bạn nfđể tạo tệp tin rỗng trên dòng lệnh.
Gán cùng một ký tự ổ đĩa cho một ổ đĩa di động.
Thử thách ở đây là làm sao có thể tháo rời được ổ USB(ổ đĩa flash) luôn có sẵn dưới cùng một chữ cái, bất kể nó được sử dụng trên máy tính nào hoặc được kết nối như thế nào. Để giải quyết nó, chúng ta sẽ sử dụng lệnh SUBST đã được đề cập ở trên. Ví dụ: hãy chọn ký tự mong muốn cho đĩa di động - X. Tên của đĩa mà tệp bó được khởi chạy có sẵn dưới dạng biến %~d0. Tạo một tệp bó với nội dung sau: @echo tắt
thế X: %~d0
việc tạo một đĩa ảo X: được liên kết với đĩa vật lý, từ đó tệp bó được khởi chạy.
Bạn có thể lấy thông tin chi tiết bổ sung về các giá trị thay thế cho biến %0 từ tệp bó sau:
@echo tắt
ĐANG XỬ LÝ TỆP ECHO - %0
ECHO Ngày/giờ tệp bó được tạo/sửa đổi - %~t0
Đường dẫn tệp hàng loạt ECHO - "%~f0"
Đĩa tập tin lệnh ECHO - %~d0
Thư mục tập tin hàng loạt ECHO - "%~p0"
Tên tệp hàng loạt ECHO - %~n0
Phần mở rộng tệp ECHO Batch - %~x0
tiếng vang Tên ngắn và phần mở rộng - %~s0
Thuộc tính tệp hàng loạt ECHO - %~a0
Kích thước tệp hàng loạt ECHO - %~z0
Tạo các thế hệ lưu trữ dựa trên ngày và giờ.
Hãy giải quyết vấn đề sau - chúng ta cần tạo một kho lưu trữ các tệp nằm trong thư mục C:Program FilesFAR. Tên tập tin lưu trữ phải bao gồm thời gian hiện tại (giờ.phút.giây - HH.MM.SS.rar) và nó phải được đặt trong danh mục mới, tên của nó phải bao gồm ngày hiện tại (day.month.year - DD.MM.YYYY). Để lưu trữ, chúng tôi sẽ sử dụng trình lưu trữ RAR. Khởi chạy định dạng để tạo một kho lưu trữ:
RAR a -r< путь и имя архива > < Путь и имя архивируемых данных >
Một- lệnh tạo kho lưu trữ.
-r- khóa xác định việc lưu trữ các thư mục con (vì có các thư mục con trong thư mục nguồn).
Vì vậy, để giải quyết vấn đề, bạn cần tạo chính xác tên và đường dẫn cho RAR. Đối với điều này, chúng tôi sẽ sử dụng các yếu tố sau:
Ngày thu được từ biến %DATE% khi cài đặt tiêu chuẩn cài đặt khu vực trông như thế này: Đặt VDATE=%date:~3% Tạo một thư mục trên ổ C:, có tên = ngày hiện tại từ biến VDATE: MD C:\%VDATE% Thời gian thu được từ biến %TIME%: Hãy khởi chạy trình lưu trữ: Bây giờ bạn có thể tạo một tệp bó với nội dung: Đặt VDATE=%date:~3% Tệp bó như vậy có thể được thực thi thông qua tự động tải hoặc như một phần của tập lệnh khi người dùng đăng nhập vào miền hoặc sử dụng bộ lập lịch trong thời gian quy định và bạn sẽ luôn có sẵn kho lưu trữ dữ liệu quan trọng theo thứ tự thời gian.
Tệp bó này tạo các kho lưu trữ nội dung của thư mục "Tài liệu của tôi" của người dùng Win2K/XP, đặt chúng vào các thư mục |
Các biến môi trường được sử dụng trong các tệp bó (lệnh) cho phép bạn tránh chỉ định đường dẫn tuyệt đối tới các thư mục. Ví dụ: nếu chúng ta không biết trước ký tự ổ đĩa hệ thống, chúng ta luôn có thể sử dụng biến %ổ đĩa hệ thống%, trả về ký tự ổ đĩa mà hệ điều hành được cài đặt. Ngoài ra, các biến được sử dụng để tối ưu hóa mã - một tham số lặp lại nhiều lần (ví dụ: khóa đăng ký) có thể được gán một biến ngắn và được sử dụng. Bài viết này thảo luận chi tiết các kỹ thuật khác nhau để làm việc với các biến, cũng như các cách thay đổi và tạo các biến mới. Bây giờ hãy nói về mọi thứ theo thứ tự.
Phân loại các biến môi trường
Bản tóm tắt
Shell lệnh Windows (cmd.exe) rất công cụ đắc lực làm việc với hệ thống. Các tệp hàng loạt có thể tự động hóa một lượng lớn tác vụ, đó là lý do tại sao chúng thường được sử dụng để cài đặt tự động Các cửa sổ. Việc sử dụng khéo léo các biến trong tệp bó cho phép bạn giải quyết nhiều vấn đề. Làm việc với shell lệnh trở nên hiệu quả hơn và đồng thời mã cho các tệp batch được đơn giản hóa. Bạn có thể tìm thấy các ví dụ khác về cách sử dụng biến trên các trang của trang web hoặc diễn đàn. Tất cả các ví dụ được sử dụng trong bài viết này đều được lấy từ kịch bản của những người tham gia, xin cảm ơn họ rất nhiều.
Thuật ngữ
Vỏ lệnh- cái này riêng biệt phần mềm, cung cấp giao tiếp trực tiếp giữa người dùng và hệ điều hành. Giao diện người dùng dòng lệnh dựa trên văn bản cung cấp một môi trường trong đó các ứng dụng và tiện ích với giao diện văn bản.
cmd.exe- một trình thông dịch lệnh đó vỏ lệnh Hệ điều hành Windows sử dụng để dịch lệnh đã nhập sang định dạng mà hệ thống hiểu được.
Phiên họp nhóm có thể được bắt đầu bằng cách khởi chạy cmd.exe và bằng cách chạy một tệp bó. Nói cách khác, shell lệnh hiện tại được tạo. Theo đó, việc thoát khỏi shell này (ví dụ như hoàn thiện một file batch) sẽ kết thúc phiên lệnh.
Phiên người dùng (phiên người dùng) bắt đầu khi người dùng đăng nhập (đăng nhập) và kết thúc khi người dùng đăng xuất (đăng xuất).