BAT komut dosyasında göreli yol


130

USB sürücümdeki kendi program klasörüm:

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

run.batBaşlamak için kullanmak isterimIris.exe

Bunu kullanamıyorum: F:/Program/bin/Iris.exebir kısayol gibi, çünkü bazen sürücü olarak eklenmiyor F:( örneğin E: veya G:)

Sürücü harfinden bağımsız olarak çalışmak için yarasa dosyasına ne yazmam gerekiyor?

Bunu BAT dosyasında denedim:

"\bin\Iris.exe"

Ama bu çalışmıyor.

Yanıtlar:


275

Bunu toplu iş dosyanızda kullanın:

%~dp0\bin\Iris.exe

%~dp0 toplu iş komut dosyasının bulunduğu klasörün tam yoluna çözümlenir.


7
Aslında bu, C:\myDir\\bin\Iris.exe(çift ters eğik çizgiye dikkat edin) gibi bir şeyi çözer . Bu hala çalışıyor, ancak bölme "daha temiz" görünmeden önce ters eğik çizgiyi bir kenara bırakmak mı? -> %~dp0bin\Iris.exe.
mozzbozz

8
@mozzbozz Her %~dp0zaman sonunda ters eğik çizgi olacağını garanti ederseniz , her iki ifade de çalışacaktır. Aksi takdirde, ek ters eğik çizgiye sahip olan, daha güvenli varyanttır.
Ansgar Wiechers

4
Tamam, bu bir nokta. Bunu yalnızca iki farklı Windows 7 makinesinde test ettim, başka bir yerde farklı olabilir (XP, Vista veya Windwos 8 -> Bilmiyorum ama: Microsoft mantığı ve bununla ilgili herhangi bir belge bulamadım;)). Ancak, ben (o tırnak işareti koymak zorunda olduğu tespit "%~dp0\bin\Iris.exe"yolu olarak bunu :) Just bir boşluk vardı gibi) gerçekten emin her bilgisayarda çalışır.
mozzbozz

1
bir SET "scriptdir=%~dp0"sonraki satırda ters eğik çizgi olmasını sağlayabilirsiniz IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Yolun ortasında çift ters eğik çizginin yazılımı bozduğu olaylar gördüm.
LogicDaemon

40

Aşağıdaki kodu kullanarak gerekli tüm dosya özelliklerini elde edebilirsiniz:

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

%CD%Betiğin yolunu değil, betiğin yolunu değil, ancak betiğin %~dp0yolunu vereceğini buldum .


14

Mevcut dizini kullanabilmelisiniz

"% CD'si%" \ bin \ Iris.exe


1
Bu, geçerli dizin olmadığında başarısız olur Program, bu, gezginden çift tıkladığınızda gerçekleşir run.bat. %CD%geçerli dizin %~dp0, toplu iş dosyasının kendisinin
dizinidir

5

ya bin\Iris.exe (baştaki eğik çizgi yok - çünkü bu kökten başlamak anlamına gelir)
ya da \Program\bin\Iris.exe(tam yol)


1
bin \ Iris.exe çalışmıyor :( Kök kullanmayı sevmiyorum, çünkü bir gün belki bu dizini başka bir yere taşıyacağım. Ya işletim sisteminden geçerli mutlak yolu sorarsam? ve kullanacağım exe bin içinde mi başlatılacak?
user2083037

Mevcut sürücünün USB çubuğunun sürücüsü olacağını ve mevcut klasörün olacağını varsaydım \Program- durum böyle değil mi? Bunu, cd
.exe'yi

Sadece göreli bir yol kullanmak ille de işe yaramayacaktır. Yol, ana dizininden farklı olabilecek geçerli çalışma dizinine göre olacaktır run.bat.
Ansgar Wiechers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.