2013-06-12 45 views
189

Thứ nhất, tôi thấy this topic nhưng tôi không thể hiểu điều đó.Lấy thư mục batchfile hiện tại

Câu hỏi:

Có một tập tin thực thi trong D:\path\to\file.bat với nội dung sau:

echo %cd% 
pause 

Output là:

C:\ 

Nó phải được D:\path\to

Tôi đang làm gì sai?

+5

Bạn nên đọc tất cả các câu trả lời cho một câu hỏi, đặc biệt là các getters bỏ phiếu cao hơn, không chỉ là câu trả lời được chấp nhận. Câu trả lời có điểm số cao nhất tại liên kết đã đăng của bạn đã trả lời câu hỏi của bạn. – dbenham

+4

Nếu bạn đang ở c: \ khi bạn nhập tên tập tin thực thi thì c: \ là% cd% sẽ in. – foxidrive

Trả lời

373

Biến chỉ đọc hệ thống %CD% giữ đường dẫn của người gọi của lô, không phải vị trí tệp lô.

Bạn có thể lấy tên của tập lệnh theo lô do người dùng nhập với %0 (ví dụ: scripts\mybatch.bat). Parameter extensions có thể được áp dụng cho điều này để %~dp0 sẽ trả lại Drive và Đường dẫn đến tập lệnh theo lô (ví dụ: W:\scripts\) và %~f0 sẽ trả về tên đường dẫn đầy đủ (ví dụ: W:\scripts\mybatch.cmd).

Bạn có thể tham khảo các file khác trong cùng một thư mục như kịch bản hàng loạt bằng cách sử dụng cú pháp sau:

CALL %0\..\SecondBatch.cmd 

này thậm chí có thể được sử dụng trong một chương trình con, Echo %0 sẽ cung cấp cho các nhãn cuộc gọi nhưng, echo "%~nx0" sẽ cung cấp cho bạn tên tệp của tập lệnh batch.

Khi biến số %0 được mở rộng, kết quả được bao trong dấu ngoặc kép.

More on batch parameters.

+1

Hãy nhìn xem, tôi không cần chạy 'stm.sql' trong 'D: \ Dir1 \ Dir2 \ stm.sql'. Tôi cần 'mysql.exe -u root -p mysql <% cd% \ stm.sql' để thực hiện các lệnh stm.sql đó. –

+0

@HamedKamrava là nó cho lô SQL của tôi? không phải tập tin batch giống như '*.bat' hoặc '* .sh'? – Stoleg

+0

@ Stoleg- Trong thực tế, có 2 tệp trong 'D: \ Dir1 \ Dir2 \ batchfile.bat' và 'D: \ Dir1 \ Dir2 \ stm.sql'. Nội dung batchfile.bat là: 'mysql.exe -u root -p mysql

77

Rất đơn giản:

setlocal 
cd /d %~dp0 
File.exe 
+5

Mã này ngắn nhưng không đơn giản để hiểu. File.exe này là gì? Đường dẫn thư mục hiện có có được lưu trong% ~ dp0 không? –

+1

@IvailoBardarov Đây là câu trả lời: https://stackoverflow.com/a/18310141/5259296 –

+0

Câu trả lời này thực sự trả lời câu hỏi, tôi nghĩ vậy. Thanh danh. – macetw

14

Trong tập tin .bat của bạn:

set mypath=%cd% 

Bây giờ bạn có thể sử dụng các biến %mypath% để tham khảo các đường dẫn tập tin vào file .bat. Để xác minh con đường là chính xác:

@echo %mypath% 

Ví dụ, một tập tin gọi là DIR.bat với các nội dung sau

set mypath=%cd% 
@echo %mypath% 
Pause 

chạy từ thư mục g:\test\bat sẽ echo mà đường dẫn trong cửa sổ lệnh DOS.

+0

đây là giải pháp tốt nhất và đơn giản nhất – Nani

Các vấn đề liên quan