Tôi có tệp lô nằm trong thư mục và phải được chạy từ đó vì nó cập nhật tệp trong thư mục này.
Điều này hoạt động hoàn toàn tốt, ngoại trừ khi người dùng chạy tệp bó với tư cách quản trị viên (bắt buộc trên Vista). Sau đó thư mục khởi động là C: \ Windows \ System32.
Có cách nào để vẫn có thể biết được từ thư mục nào tập tin thực thi được chạy?
Tôi không muốn người dùng nhập thư mục theo cách thủ công.Thư mục bắt đầu của loạt tệp Windows khi 'chạy dưới dạng quản trị viên'
Trả lời
Hãy thử truy cập đường dẫn file thực thi như thế này:
echo %~dp0
Để biết thêm thông tin, xem đoạn trích sau đây từ lệnh for /?
mô tả cách lệnh công trình trên:
You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string The modifiers can be combined to get compound results: %~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
tôi sử dụng:
cd% 0 ..
khi cầu xin hiệp của tập tin batch để thay đổi thư mục vào thư mục chứa tập tin thực thi được bắt đầu vào
-Mathew
Điều đó sẽ không thay đổi ký tự ổ đĩa. –
Một giải pháp làm việc ở đây:.
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
FOR/F %% Tôi TRÊN ("% 0") DO SET BATDIR = %% ~ dpi
eCHO Các tập tin thực thi nằm trong thư mục% BATDIR%
Bạn có thể sử dụng trực tiếp '% ~ dp0'. Không cần phải gọi 'for' ở đây. – Joey
tốt hơn so với cd
là pushd
mà
- thay đổi ký tự ổ đĩa nếu bắt đầu từ
D:\...
- sẽ gán một ký tự ổ đĩa nếu trên một đường dẫn mạng UNC
Vì vậy pushd %~dp0
là tốt.
Thực hành tốt là sau đó gọi popd
khi hoàn tất.
này nên giải quyết vấn đề của bạn bằng cách thiết lập thư mục làm việc cho các tập tin thực thi lại vào thư mục hiện:
Bao gồm hai dòng sau ở phía trên cùng của kịch bản .bat của bạn:
@setlocal enableextensions
@cd /d "%~dp0"
Tìm thấy tại : http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
Điều này là hoàn hảo. Giải quyết vấn đề "không tìm thấy tệp" của tôi khi chạy tệp bat làm quản trị viên. – pandalion98
Bạn có thể CD trực tiếp từ tên tệp bằng cách thêm phụ huynh (không được kiểm tra trong cửa sổ 8.x, nhưng đã làm việc "mãi mãi" theo như tôi có thể nhớ).
CD %FILENAME%\..
và CD sẽ thay đổi ổ đĩa cũng như/D, được hiển thị ở trên nhưng không được đề cập rõ ràng để có thể bỏ qua. CD/D% FILENAME% \ ..
(FOR /? NẾU /? SET /? CALL /? GOTO /? tất cả cung cấp đọc rất hữu ích nếu bạn sử dụng cmd.exe, tôi đọc lại chúng một lần trong một thời gian.)
Fantastic , Tôi không biết cái này. Cảm ơn rất nhiều – Marc
Làm mờ đến mức nào! Nhưng chính xác những gì tôi cần. Cảm ơn. – stucampbell
@stucampbell thử lệnh 'for /?' để có được một mô tả chi tiết về cách thức hoạt động (di chuyển xuống trang 4) – Martin