Tôi biết rằng %0
có chứa đường dẫn đầy đủ của tập lệnh bó, vdc:\path\to\my\file\abc.bat
Tôi sẽ path
bằngc:\path\to\my\file
Làm thế nào tôi có thể đạt được điều đó?
Tôi biết rằng %0
có chứa đường dẫn đầy đủ của tập lệnh bó, vdc:\path\to\my\file\abc.bat
Tôi sẽ path
bằngc:\path\to\my\file
Làm thế nào tôi có thể đạt được điều đó?
Câu trả lời:
%~dp0
sẽ là thư mục. Đây là một số tài liệu về tất cả các sửa đổi đường dẫn . Công cụ thú vị :-)
Để xóa dấu gạch chéo ngược cuối cùng, bạn có thể sử dụng :n,m
cú pháp chuỗi con, như vậy:
SET mypath=%~dp0
echo %mypath:~0,-1%
Thật không may, tôi không tin có cách kết hợp %0
cú pháp với :~n,m
cú pháp.
%~0\..
- biết rằng phải có một cách tốt hơn! Ngoài ra, bạn có thể sẽ muốn gửi kèm theo %~dp0
dấu ngoặc kép ( ""
) trong trường hợp có khoảng trắng trong tên thư mục, v.v.
%~dp0
chứa `` ở cuối. Bạn có một ý tưởng làm thế nào để loại bỏ nó?
SET msg=hello world
hoạt động tốt). Tuy nhiên, khi sử dụng% mypath% ở nơi khác, bạn muốn cẩn thận sử dụng nó trong dấu ngoặc kép, mặc dù chúng không cần thiết cho cd
cả hai.
Bạn có thể sử dụng tập lệnh sau để lấy đường dẫn mà không theo dõi "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0
có thể là một con đường tương đối Để chuyển đổi nó thành một đường dẫn đầy đủ, hãy thử một cái gì đó như thế này:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
trực tiếp?
%~dp0
có thể là tương đối, có thể hoặc không phải là vấn đề tùy thuộc vào trường hợp sử dụng
%~dp0
không thể chứa đường dẫn tương đối, d
viết tắt của ổ đĩa và p
đường dẫn, làm thế nào một ổ đĩa có thể tương đối?
%~dp0
nó sẽ là một đường dẫn tuyệt đối ngay cả khi tập lệnh được chạy dưới dạng đường dẫn tương đối. Nhờ bình luận của jeb, tôi không bị lừa bởi câu trả lời này. Tại sao mọi người chỉ trang điểm và đi và bắt đầu truyền bá trí tưởng tượng hoang dã của họ cho người khác. Tôi có đồng nghiệp này làm việc này, nhưng tôi đổ lỗi cho tuổi (trẻ) của anh ấy. Tôi muốn bỏ phiếu của tôi sẽ được tính.
Bạn có thể sử dụng %~dp0
, d chỉ có nghĩa là ổ đĩa, p chỉ có nghĩa là đường dẫn, 0 là đối số cho tên tệp đầy đủ của tệp bó.
Ví dụ: nếu đường dẫn tệp là C: \ Users \ Oliver \ Desktop \ example.bat thì đối số sẽ bằng C: \ Users \ Oliver \ Desktop \, bạn cũng có thể sử dụng lệnh set cpath=%~dp0 && set cpath=%cpath:~0,-1%
và sử dụng %cpath%
biến để xóa dấu gạch chéo.
%cd%
sẽ cung cấp cho bạn đường dẫn của thư mục từ nơi tập lệnh đang chạy.
Chỉ cần chạy:
echo %cd%
%CD%
là thư mục làm việc hiện tại, không phải thư mục, nơi lưu trữ tệp bó. Họ có thể là cùng một vị trí, nhưng thường thì không.
Đó sẽ là %CD%
biến.
@echo off
echo %CD%
%CD%
trả về thư mục hiện tại tập lệnh bó.
CD C:\Temp <CR> ECHO %CD%
( <CR>
là dòng mới ...)
Tôi đang làm việc trên máy Windows 7 và cuối cùng tôi đã sử dụng các dòng bên dưới để có được đường dẫn thư mục tuyệt đối cho tập lệnh bash của mình.
Tôi đã nhận được giải pháp này sau khi xem http://www.linuxjournal.com/content/bash-parameter-Exansion .
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder