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.