Tôi biết rằng %0có chứa đường dẫn đầy đủ của tập lệnh bó, vdc:\path\to\my\file\abc.bat
Tôi sẽ pathbằngc:\path\to\my\file
Làm thế nào tôi có thể đạt được điều đó?
Tôi biết rằng %0có chứa đường dẫn đầy đủ của tập lệnh bó, vdc:\path\to\my\file\abc.bat
Tôi sẽ pathbằngc:\path\to\my\file
Làm thế nào tôi có thể đạt được điều đó?
Câu trả lời:
%~dp0sẽ 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,mcú 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 %0cú pháp với :~n,mcú 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 %~dp0dấu ngoặc kép ( "") trong trường hợp có khoảng trắng trong tên thư mục, v.v.
%~dp0chứa `` ở cuối. Bạn có một ý tưởng làm thế nào để loại bỏ nó?
SET msg=hello worldhoạ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 cdcả 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"
%~dp0có 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
%~dp0trực tiếp?
%~dp0có 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
%~dp0không thể chứa đường dẫn tương đối, dviết tắt của ổ đĩa và pđường dẫn, làm thế nào một ổ đĩa có thể tương đối?
%~dp0nó 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