Làm thế nào bạn có thể lấy thư mục của tập lệnh đã được chạy và sử dụng nó trong tệp .cmd?
Làm thế nào bạn có thể lấy thư mục của tập lệnh đã được chạy và sử dụng nó trong tệp .cmd?
Câu trả lời:
Raymond Chen có một vài ý tưởng:
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
Trích dẫn đầy đủ ở đây vì các kho lưu trữ MSDN có xu hướng hơi không đáng tin cậy:
Cách dễ dàng là sử dụng
%CD%
biến giả. Nó mở rộng đến thư mục làm việc hiện tại.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Tất nhiên, lưu / khôi phục thư mục có thể được thực hiện dễ dàng hơn với
pushd
/popd
, nhưng đó không phải là vấn đề ở đây.)Thủ
%CD%
thuật này rất hữu ích ngay cả từ dòng lệnh. Ví dụ, tôi thường thấy mình đang ở trong một thư mục có tệp mà tôi muốn thao tác nhưng ... ồ, tôi cần chuyển đến một số thư mục khác để thực hiện thao tác đó.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(Tôi muốn sử dụng
%_%
làm biến môi trường đầu của mình.)Nhập
SET /?
để xem các biến giả khác được cung cấp bởi bộ xử lý lệnh.
Ngoài ra, các nhận xét trong bài viết cũng rất đáng để quét, ví dụ như nhận xét này (thông qua WayBack Machine, vì các nhận xét đã biến mất từ các bài viết cũ hơn):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Điều này bao gồm việc sử dụng% ~ dp0:
Nếu bạn muốn biết vị trí của tệp loạt:
%~dp0
%0
là tên của tệp hàng loạt.~dp
cung cấp cho bạn ổ đĩa và đường dẫn của đối số được chỉ định.
Điều này tương đương với đường dẫn của script:
%~dp0
Điều này sử dụng cú pháp mở rộng tham số lô. Tham số 0 luôn là chính tập lệnh.
Nếu tập lệnh của bạn được lưu trữ tại C:\example\script.bat
, thì %~dp0
đánh giá là C:\example\
.
ss64.com có thêm thông tin về cú pháp mở rộng tham số. Đây là đoạn trích liên quan:
Bạn có thể nhận giá trị của bất kỳ tham số nào bằng cách sử dụng% theo sau là vị trí số của nó trên dòng lệnh.
[...]
Khi một tham số được sử dụng để cung cấp tên tệp thì có thể áp dụng cú pháp mở rộng sau:
[...]
% ~ d1 Chỉ mở rộng% 1 thành ký tự Drive - C:
[...]
% ~ p1 Chỉ mở rộng% 1 thành một Đường dẫn, ví dụ: \ utils \ điều này bao gồm một dấu chấm \ có thể được hiểu là một ký tự thoát bởi một số lệnh.
[...]
Các bổ ngữ ở trên có thể được kết hợp:
% ~ dp1 Chỉ mở rộng% 1 thành ký tự ổ đĩa và đường dẫn
[...]
Bạn có thể lấy tên đường dẫn của chính tập lệnh lô với% 0, các phần mở rộng tham số có thể được áp dụng cho điều này để% ~ dp0 sẽ trả về Drive và Đường dẫn đến tập lệnh lô, ví dụ W: \ scripts \