ścieżka względna w skrypcie BAT

134

Oto mój własny folder programu na moim dysku USB:

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

Chciałbym run.batzacząć używaćIris.exe

Nie mogę tego użyć: F:/Program/bin/Iris.exejak skrót, bo czasami nie dołącza się jako dysk F:( np. E: Lub G:)

Co muszę napisać w pliku bat, aby działał niezależnie od litery dysku?

Próbowałem tego w pliku BAT:

"\bin\Iris.exe"

Ale to nie działa.

user2083037
źródło

Odpowiedzi:

284

Użyj tego w swoim pliku wsadowym:

%~dp0\bin\Iris.exe

%~dp0 rozpoznaje pełną ścieżkę do folderu, w którym znajduje się skrypt wsadowy.

Ansgar Wiechers
źródło
7
W rzeczywistości prowadzi to do czegoś w stylu C:\myDir\\bin\Iris.exe(zwróć uwagę na podwójny ukośnik odwrotny). To nadal działa, ale pozostawienie ukośnika odwrotnego przed bin wydaje się być „czystsze”? -> %~dp0bin\Iris.exe.
mozzbozz
9
@mozzbozz Jeśli możesz zagwarantować, że %~dp0na końcu będzie zawsze znajdował się ukośnik odwrotny, obie instrukcje będą działać. W przeciwnym razie wariant z dodatkowym odwrotnym ukośnikiem jest wariantem bezpieczniejszym.
Ansgar Wiechers
4
Ok, o to chodzi. Przetestowałem to tylko na dwóch różnych komputerach z systemem Windows 7, gdzie indziej może wyglądać inaczej (XP, Vista lub Windwos 8 -> Nie wiem, ale: logika Microsoft i nie mogłem znaleźć żadnych dokumentów na ten temat;)). Uważam jednak, że musiałem umieścić cudzysłowy wokół niego ( "%~dp0\bin\Iris.exe") jako ścieżka miała spacje w jej :) Wystarczy być naprawdę pewien, że to działa na każdym komputerze.
mozzbozz
1
możesz upewnić się, że w SET "scriptdir=%~dp0"następnym wierszu znajduje się ukośnik odwrotny IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Widziałem incydenty, w których podwójny lewy ukośnik w środku ścieżki łamie oprogramowanie.
LogicDaemon,
42

Możesz uzyskać wszystkie wymagane właściwości pliku, korzystając z poniższego kodu:

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:?
)
Gaurav Kolarkar_InfoCepts
źródło
27

Odkryłem, że %CD%podaje ścieżkę, z której został wywołany skrypt, a nie ścieżkę skryptu, jednak %~dp0ścieżkę samego skryptu.

Sitri
źródło
15

Powinieneś móc korzystać z bieżącego katalogu

„% CD%” \ bin \ Iris.exe

Johan A.
źródło
1
To się nie powiedzie, gdy bieżący katalog nie jest Program, stanie się to po dwukrotnym kliknięciu run.batw eksploratorze. %CD%to katalog bieżący %~dp0jest katalogiem samego pliku wsadowego
jeb
5

albo bin\Iris.exe (bez wiodącego ukośnika - ponieważ oznacza to, że zacznij od początku)
lub \Program\bin\Iris.exe(pełna ścieżka)

AjV Jsy
źródło
1
bin \ Iris.exe nie działa :( Nie lubię używać roota, bo może kiedyś przeniosę ten katalog w inne miejsce. A co jeśli zapytam z systemu operacyjnego o aktualną ścieżkę bezwzględną? i użyję to, aby uruchomić exe w bin?
user2083037
Założyłem, że obecny dysk będzie dyskiem pamięci USB, a bieżący folder będzie \Program- czy tak nie jest? Możesz to pokazać za pomocą prostego cdpolecenia w wierszu, zanim spróbujesz uruchomić
plik
Samo użycie ścieżki względnej niekoniecznie zadziała. Ścieżka będzie zależna od bieżącego katalogu roboczego, który może różnić się od katalogu nadrzędnego run.bat.
Ansgar Wiechers,