Thư mục hiện tại trong một tập tin bó là gì?


510

Tôi muốn tạo một vài tệp bó để tự động hóa một chương trình.

Câu hỏi của tôi là khi tôi tạo tập tin bó, thư mục hiện tại là gì? Đây có phải là thư mục chứa tập tin hay nó là cùng thư mục xuất hiện trong dấu nhắc lệnh, hay cái gì khác?

Câu trả lời:


1025

Từ trong tệp bó của bạn:

  • %cd%đề cập đến thư mục làm việc hiện tại (biến)
  • %~dp0 đề cập đến đường dẫn đầy đủ đến thư mục của tệp bó (tĩnh)
  • %~dpnx0%~f0cả hai đều đề cập đến đường dẫn đầy đủ đến thư mục bó và tên tệp (tĩnh).

Xem thêm: % ~ dp0 có nghĩa là gì và nó hoạt động như thế nào?


5
@ Ееу - %0có thể đặt tên của chương trình con hiện tại, nhưng %~dp0sẽ luôn cung cấp đường dẫn đầy đủ đến tệp bó thực thi.
dbenham

77
Trên thực tế, có vẻ như% ~ dp0 cung cấp đường dẫn đầy đủ đến thư mục chứa tệp bó thực thi.% ~ Dpnx0 (tương đương với% ~ f0) cung cấp đường dẫn đầy đủ đến tệp bó. Xem robvanderwoude.com/parameter.php để biết thêm chi tiết.
deadlydog

6
Xem thêm câu trả lời chi tiết tốt cho một câu hỏi tương tự: Nhận danh sách các đối số đã qua trong tập lệnh bó của Windows (.bat)
olibre

1
Thật không may khi chạy như một quá trình từ .net% ~ dp0 là thư mục làm việc không phải là thư mục tệp bó, Tìm thấy điều này một cách khó khăn.
trampster

3
Như một ví dụ rõ ràng hơn, khi nhấp chuột phải vào một .cmdtệp và chạy với tư cách quản trị viên, %cd%đưa ra C:\WINDOWS\system32%~dp0đưa ra thư mục tệp bó với dấu gạch chéo.
icc97

25

thường là thư mục mà tệp bó được bắt đầu, nhưng nếu bạn bắt đầu tệp bó từ một phím tắt, một thư mục bắt đầu khác có thể được cung cấp. Ngoài ra, khi bạn ở cmd và thư mục hiện tại của bạn c:\dir3, bạn vẫn có thể bắt đầu tệp bó bằng cách sử dụng c:\dir1\dir2\batch.battrong trường hợp đó, thư mục hiện tại sẽ có c:\dir3.


11

Trong một tệp bó,% cd% là lệnh được sử dụng phổ biến nhất cho thư mục hiện tại, mặc dù bạn có thể đặt biến của riêng mình:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Vì vậy, nói rằng bạn muốn mở Myprog.exe. Nếu nó nằm trong cùng một thư mục, bạn sẽ sử dụng lệnh:

start %mypath%\Myprog.exe

Điều đó sẽ mở Myprog từ thư mục hiện tại.

Tùy chọn khác là tạo một thư mục trong C: được gọi là AutomatePrograms. Sau đó, bạn chuyển các tệp của mình vào thư mục đó, sau đó bạn có thể mở chúng bằng lệnh sau:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
Như đã lưu ý trong câu trả lời hàng đầu ở đây, %cd%là biến, do đó, việc chạy tệp bó từ Windows Explorer với tư cách quản trị viên sẽ cung cấp C:\WINDOWS\system32gần như chắc chắn không phải là điều bạn muốn. %~dp0là phù hợp hơn.
icc97

6

Giả sử bạn đang mở một tệp trong thư mục hiện tại của bạn. Lệnh sẽ là:

 start %cd%\filename.filetype

Tôi hy vọng tôi đã trả lời câu hỏi của bạn.


5

Đây là thư mục mà bạn chạy lệnh để thực thi tệp bó của mình.

Như đã đề cập trong các câu trả lời ở trên, bạn có thể thêm lệnh bên dưới vào tập lệnh của mình để xác minh:

> set current_dir=%cd%
> echo %current_dir%  

4

Đây là thư mục từ nơi bạn bắt đầu tập tin bó. Ví dụ, nếu lô của bạn vào c:\dir1\dir2và bạn làm cd c:\dir3, sau đó chạy lô, thư mục hiện tại sẽ có c:\dir3.


0

Chỉ cần 2 xu của tôi. Lệnh sau không thành công nếu được gọi từ tệp bó (Windows 7) được đặt trên Pendrive:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Nhưng điều này thực hiện công việc:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

Đây là công tắc mà tôi đang tìm kiếm để xác định đường dẫn thư mục mẹ của tệp bat của tôi mà không có tên tệp bó đó:%~dp0
Ammar Mohammad
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.