Nhận thư mục chứa tập lệnh bó hiện đang thực thi


30

Tôi sử dụng %0trong tệp bó để lấy thư mục chứa tệp bó nhưng kết quả là: -

c:\folder1\folder2\batch.bat

Tôi chỉ muốn thư mục, không có tên tệp bó, như thế này: -

c:\folder1\folder2\

Tôi làm nó như thế nào? Có lẽ tôi nên lọc đường dẫn. Nếu có, làm thế nào tôi có thể làm điều đó?


Khi sử dụng% 0 trong tệp bó như một phần của dòng lệnh, bạn nên sử dụng% 0 \ .. \ RestOfStuff. Dấu chấm kép đưa nó trở lại qua tên tệp.
John Gardeniers

Thư mục chứa tập lệnh hiện được thực thi không nhất thiết phải giống với thư mục làm việc hiện tại (CD)! Tôi đã chỉnh sửa câu hỏi tương ứng - bây giờ nó tránh thuật ngữ "thư mục hiện tại".
chiccodoro

Câu trả lời:


52
%~p0

Sẽ trả lại con đường mà thôi.

%~dp0

Sẽ trả lại ổ đĩa + đường dẫn.

Thông tin thêm về chủ đề này có thể được tìm thấy trên trang web của Microsoft .

Thông tin về cú pháp này cũng có thể được tìm thấy trong phần trợ giúp cho lệnh for bằng cách thực thi for /?trên HĐH Windows.


2
Là một nguồn tham khảo khác, cùng một danh sách thay thế biến cũng được hiển thị khi bạn nhậpfor /?
Kevin

% ~ dp0 đưa ra thư mục của tệp bó thực thi. Nếu tệp bó nằm trong một thư mục khác, bạn sẽ nhận được thư mục khác đó. % CD% luôn cung cấp cho bạn thư mục hiện tại.
Mihai Danila

@MihaiDanila, không, đó không phải là những gì OP yêu cầu.
Bart De Vos

Trên thực tế tôi đã nhận được câu hỏi này trong khi tìm kiếm một cách để có được thư mục hiện tại . Đây là hit đầu tiên trên Google. Tiêu đề rõ ràng nói rằng thư mục hiện tại , mặc dù bạn đúng về nội dung. Cả hai chúng tôi đều đúng, nhưng tôi nghĩ lain và tôi đúng hơn về những gì câu hỏi thực sự truyền tải, bất chấp những gì được dự định bởi nó. Đó là lý do tại sao tôi đã đưa ra câu trả lời của lain ... Tiêu đề câu hỏi nên được đổi tên để đồng bộ với chính câu hỏi.
Mihai Danila

1
Có lẽ tiêu đề của bài viết trong liên kết có thể đã được cung cấp, vì liên kết không còn giá trị nữa .....
Rupsingh Mathwale

16

Thư mục hiện tại được giữ ở% CD%


4
% CD% giữ lại đường dẫn mà bạn thực hiện lô từ đó không phải là nơi tồn tại tệp bó
Mohammad AL-Rawabdeh

4
@Mohammad: Thật vậy, nó là thư mục hiện tại . Một cái khác là thư mục chứa tập tin batch. Hai cái đó không giống nhau và câu hỏi của bạn hỏi rõ ràng cho cái này. Vì vậy, vui lòng chỉnh sửa nó nếu đó không phải là ý bạn.
Joey

% CD% trả về đường dẫn hiện tại của tệp bó nhưng không thành công khi chúng tôi thực thi tệp bó với tư cách quản trị viên. Khi chúng tôi chạy tệp bó với tư cách quản trị viên thì nó sẽ trả về đường dẫn của System32. Vì vậy, tùy chọn tốt hơn là sử dụng% ~ dp0 cho đường dẫn hoàn chỉnh

% ~ dp0 đưa ra thư mục của tệp bó thực thi. Nếu tệp bó nằm trong một thư mục khác, bạn sẽ nhận được thư mục khác đó. % CD% luôn cung cấp cho bạn thư mục hiện tại.
Mihai Danila

Đối với tài liệu tham khảo của người đọc - ban đầu câu hỏi sử dụng thuật ngữ "thư mục hiện tại" trong khi có nghĩa là thư mục chứa tập lệnh - điều này hiện đã được sửa.
chiccodoro

4

Một số biểu thức ảnh hưởng đến tên tệp:

~f0sẽ cung cấp tên tập tin đầy đủ.
~dpnx0sẽ cung cấp giống như ~f0, nhưng điều này cho bạn thấy rằng bạn có thể chia nó thành các phần: d = drive p = path n = name x = extension


0

sử dụng lệnh chdir

Lựa chọn 1:

chdir 

Lựa chọn 2:

echo %CD%

Tương tự ở đây: Đây không phải là ý định của OP - câu hỏi giờ đã rõ ràng hơn.
chiccodoro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.