đường dẫn tương đối trong tập lệnh BAT


130

Đây là thư mục chương trình của riêng tôi trên ổ USB của tôi:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

Tôi muốn sử dụng run.batđể bắt đầu Iris.exe

Tôi không thể sử dụng cái này: F:/Program/bin/Iris.exenhư một phím tắt, vì đôi khi nó không gắn vào như ổ đĩa F:( vd E: hoặc G:)

Tôi cần viết gì trong tập tin bat để làm việc bất kể ký tự ổ đĩa?

Tôi đã thử điều này trong tệp BAT:

"\bin\Iris.exe"

Nhưng nó không hoạt động.

Câu trả lời:


275

Sử dụng điều này trong tệp bó của bạn:

%~dp0\bin\Iris.exe

%~dp0 giải quyết theo đường dẫn đầy đủ của thư mục chứa tập lệnh bó.


7
Trên thực tế, điều này giải quyết một cái gì đó như C:\myDir\\bin\Iris.exe(lưu ý dấu gạch chéo kép). Điều này vẫn hoạt động nhưng để lại dấu gạch chéo ngược trước khi bin có vẻ "sạch" hơn? -> %~dp0bin\Iris.exe.
mozzbozz

8
@mozzbozz Nếu bạn có thể đảm bảo rằng %~dp0sẽ luôn có dấu gạch chéo ngược, cả hai câu lệnh sẽ hoạt động. Mặt khác, một dấu gạch chéo ngược bổ sung là biến thể an toàn hơn.
Ansgar Wiechers

4
Ok, đó là một điểm. Tôi chỉ thử nghiệm điều này trên hai máy Windows 7 khác nhau, có thể khác ở nơi khác (XP, Vista oder Windwos 8 -> Tôi không biết nhưng: Microsoft logic và tôi không thể tìm thấy bất kỳ tài liệu nào về nó;)). Tuy nhiên, tôi thấy rằng tôi phải đặt dấu ngoặc kép quanh nó ( "%~dp0\bin\Iris.exe") vì đường dẫn có khoảng trắng trong đó :) Chỉ để thực sự chắc chắn rằng nó hoạt động trên mọi máy tính.
mozzbozz

1
bạn có thể đảm bảo có dấu gạch chéo ngược với SET "scriptdir=%~dp0"và trên dòng tiếp theo IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Tôi đã thấy các sự cố trong đó dấu gạch chéo ngược ở giữa phần mềm phá vỡ đường dẫn.
LogicDaemon

40

Bạn có thể nhận được tất cả các thuộc tính tệp cần thiết bằng cách sử dụng mã dưới đây:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

Tôi đã tìm thấy rằng %CD%đưa ra đường dẫn mà tập lệnh được gọi từ và không phải là đường dẫn của tập lệnh, tuy nhiên, %~dp0sẽ đưa ra đường dẫn của chính tập lệnh.


14

Bạn sẽ có thể sử dụng thư mục hiện tại

"% CD%" \ bin \ Iris.exe


1
Điều này không thành công khi thư mục hiện tại không có Program, điều này sẽ xảy ra khi bạn nhấp đúp chuột vào run.battrình thám hiểm. %CD%là thư mục hiện tại %~dp0là thư mục của chính tệp bó
jeb

5

hoặc bin\Iris.exe (không có dấu gạch chéo hàng đầu - bởi vì điều đó có nghĩa là bắt đầu ngay từ gốc)
hoặc \Program\bin\Iris.exe(đường dẫn đầy đủ)


1
bin \ Iris.exe nó không hoạt động :( Tôi không thích sử dụng root, vì một ngày nào đó có thể tôi sẽ chuyển thư mục này đến một vị trí khác. Và nếu tôi hỏi từ HĐH thì đường dẫn tuyệt đối hiện tại? và tôi sẽ sử dụng rằng để bắt đầu exe trong bin?
user2083037

Tôi giả sử ổ đĩa hiện tại sẽ là ổ đĩa USB và thư mục hiện tại sẽ \Program- không phải vậy sao? Bạn có thể chỉ ra rằng với một cdlệnh đơn giản trong dòng trước khi bạn cố chạy .exe
AjV Jsy

Đơn giản chỉ cần sử dụng một đường dẫn tương đối sẽ không nhất thiết phải làm việc. Đường dẫn sẽ liên quan đến thư mục làm việc hiện tại, có thể khác với thư mục mẹ của run.bat.
Ansgar Wiechers
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.