Như những người khác đã nói, các tham số được truyền qua dòng lệnh có thể được truy cập trong các tệp bó với ký hiệu %1
là %9
. Ngoài ra còn có hai mã thông báo khác mà bạn có thể sử dụng:
%0
là tên thực thi (tệp bó) như được chỉ định trong dòng lệnh .
%*
là tất cả các tham số được chỉ định trong dòng lệnh - điều này rất hữu ích nếu bạn muốn chuyển tiếp các tham số sang chương trình khác.
Ngoài ra còn có rất nhiều kỹ thuật quan trọng cần lưu ý ngoài việc đơn giản là làm thế nào để truy cập các tham số.
Kiểm tra nếu một tham số đã được thông qua
Điều này được thực hiện với các cấu trúc như IF "%~1"==""
, điều này đúng khi và chỉ khi không có đối số nào được thông qua. Lưu ý ký tự dấu ngã làm cho bất kỳ dấu ngoặc kép nào bị xóa khỏi giá trị của %1
; không có dấu ngã, bạn sẽ nhận được kết quả không mong muốn nếu giá trị đó bao gồm dấu ngoặc kép, bao gồm cả khả năng lỗi cú pháp.
Xử lý hơn 9 đối số (hoặc chỉ làm cho cuộc sống dễ dàng hơn)
Nếu bạn cần truy cập nhiều hơn 9 đối số, bạn phải sử dụng lệnh SHIFT
. Lệnh này dịch chuyển các giá trị của tất cả các đối số một vị trí, do đó, %0
lấy giá trị của %1
, %1
lấy giá trị của %2
, v.v. %9
lấy giá trị của đối số thứ mười (nếu có), không có sẵn thông qua bất kỳ biến nào trước khi gọi SHIFT
(enter lệnh SHIFT /?
cho nhiều tùy chọn hơn).
SHIFT
cũng hữu ích khi bạn muốn dễ dàng xử lý các tham số mà không yêu cầu chúng được trình bày theo một thứ tự cụ thể. Ví dụ, một tập lệnh có thể nhận ra các cờ -a
và -b
theo bất kỳ thứ tự nào. Một cách hay để phân tích dòng lệnh trong những trường hợp như vậy là
:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-a" REM do something
IF "%~1"=="-b" REM do something else
SHIFT
GOTO parse
:endparse
REM ready for action!
Lược đồ này cho phép bạn phân tích các dòng lệnh khá phức tạp mà không bị điên.
Thay thế các tham số lô
Đối với các tham số thể hiện tên tệp, shell cung cấp nhiều chức năng liên quan đến làm việc với các tệp không thể truy cập theo bất kỳ cách nào khác. Chức năng này được truy cập với các cấu trúc bắt đầu bằng %~
.
Ví dụ: để có được kích thước của tệp được truyền vào làm đối số sử dụng
ECHO %~z1
Để có được đường dẫn của thư mục nơi tệp bó được khởi chạy từ (rất hữu ích!) Bạn có thể sử dụng
ECHO %~dp0
Bạn có thể xem toàn bộ phạm vi của các khả năng này bằng cách nhập CALL /?
vào dấu nhắc lệnh.