BAT स्क्रिप्ट में सापेक्ष पथ


130

यहाँ मेरे अपने USB ड्राइव पर प्रोग्राम फ़ोल्डर है:

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

मैं run.batशुरू करने के लिए उपयोग करना चाहूंगाIris.exe

मैं इस का उपयोग नहीं कर सकते हैं: F:/Program/bin/Iris.exeएक शॉर्टकट की तरह है, क्योंकि कभी कभी यह ड्राइव के रूप में देते हैं नहीं करता है F:( उदाहरण के लिए E: या G:)

ड्राइव अक्षर की परवाह किए बिना काम करने के लिए मुझे बैट फाइल में क्या लिखना होगा?

मैंने BAT फ़ाइल में यह कोशिश की:

"\bin\Iris.exe"

लेकिन यह काम नहीं करता है।

जवाबों:


275

इसे अपनी बैच फ़ाइल में उपयोग करें:

%~dp0\bin\Iris.exe

%~dp0 उस फ़ोल्डर के पूर्ण पथ को हल करता है जिसमें बैच स्क्रिप्ट रहती है।


7
वास्तव में यह कुछ इस तरह से हल होता है C:\myDir\\bin\Iris.exe(डबल-बैकस्लैश पर ध्यान दें)। यह अभी भी काम करता है लेकिन बिन "क्लीनर" प्रतीत होने से पहले बैकस्लैश को छोड़ देना चाहिए? -> %~dp0bin\Iris.exe
मोब्ज़ोब

8
@mozzbozz यदि आप गारंटी दे सकते हैं कि %~dp0हमेशा एक पीछे आने वाला बैकस्लैश होगा, दोनों कथन काम करेंगे। अन्यथा अतिरिक्त बैकस्लैश वाला सुरक्षित संस्करण है।
अंसार विचर्स

4
ठीक है, यह एक बिंदु है। मैंने केवल दो अलग-अलग विंडोज 7 मशीनों पर यह परीक्षण किया है, कहीं और अलग हो सकते हैं (एक्सपी, विस्टा ओडर विंडवोस 8 -> मुझे नहीं पता लेकिन: Microsoft तर्क और मुझे इसके बारे में कोई डॉक्स नहीं मिला;))। हालांकि, मैंने पाया कि मैं (यह आसपास उद्धरण चिह्न करना पड़ा "%~dp0\bin\Iris.exe") के रूप में पथ यह :) बस में एक खाली स्थान के लिए किया था होना करने के लिए वास्तव में यकीन है कि यह हर कंप्यूटर पर काम करता है।
मौज़बोज़

1
आप SET "scriptdir=%~dp0"अगली पंक्ति के साथ बैकस्लैश सुनिश्चित कर सकते हैं IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\"। मैंने उन घटनाओं को देखा है जहां मार्ग के बीच में डबल बैकस्लैश सॉफ्टवेयर को तोड़ता है।
लॉजिकडैमन

40

आप नीचे दिए गए कोड का उपयोग करके सभी आवश्यक फ़ाइल गुण प्राप्त कर सकते हैं:

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%स्क्रिप्ट को जिस रास्ते से बुलाया गया था, वह स्क्रिप्ट का रास्ता नहीं था, हालांकि, स्क्रिप्ट %~dp0का रास्ता खुद बताएगा।


14

आपको वर्तमान निर्देशिका का उपयोग करने में सक्षम होना चाहिए

"% सीडी%" \ बिन \ Iris.exe


1
यह तब होता है जब वर्तमान निर्देशिका नहीं होती है Program, यह तब होगा जब आप run.batएक्सप्लोरर से डबल क्लिक करेंगे । %CD%वर्तमान निर्देशिका %~dp0बैच फ़ाइल की निर्देशिका है
jeb

5

या तो bin\Iris.exe (कोई प्रमुख स्लैश नहीं - क्योंकि इसका मतलब है कि जड़ से सही शुरू)
या \Program\bin\Iris.exe(पूर्ण पथ)


1
बिन \ _ \ _ Iris.exe यह काम नहीं कर रहा है :( मुझे रूट का उपयोग करना पसंद नहीं है, क्योंकि किसी दिन शायद मैं इस डायर को दूसरे स्थान पर स्थानांतरित कर दूंगा। और क्या होगा यदि मैं ओएस से वर्तमान निरपेक्ष पथ पूछता हूं? और मैं उपयोग करूंगा बिन में
निर्वासन

मुझे लगता है कि वर्तमान ड्राइव यूएसबी स्टिक ड्राइव होगी, और वर्तमान फ़ोल्डर होगा \Program- क्या ऐसा नहीं है? आप cd.exe चलाने के लिए प्रयास करने से पहले लाइन में एक साधारण कमांड के साथ दिखा सकते हैं।
AjV Jsy

बस एक रिश्तेदार पथ का उपयोग जरूरी काम नहीं करेगा। पथ वर्तमान कार्यशील निर्देशिका के सापेक्ष होगा, जो मूल निर्देशिका से भिन्न हो सकता है run.bat
अंसार विचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.