आप उस स्क्रिप्ट की निर्देशिका कैसे प्राप्त कर सकते हैं जो चलाया गया था और .cmd फ़ाइल के भीतर इसका उपयोग करें?
आप उस स्क्रिप्ट की निर्देशिका कैसे प्राप्त कर सकते हैं जो चलाया गया था और .cmd फ़ाइल के भीतर इसका उपयोग करें?
जवाबों:
रेमंड चेन के कुछ विचार हैं:
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
यहाँ पूर्ण रूप से उद्धृत क्योंकि MSDN अभिलेखागार कुछ अविश्वसनीय हैं:
आसान तरीका
%CD%
छद्म चर का उपयोग करना है । यह वर्तमान कार्यशील निर्देशिका में फैलता है।
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(बेशक, डायरेक्टरी सेव / रिस्टोर अधिक आसानी से
pushd
/ के साथ किया जा सकता थाpopd
, लेकिन यहां बात नहीं है।)
%CD%
चाल कमांड लाइन से काम भी है। उदाहरण के लिए, मैं अक्सर खुद को एक निर्देशिका में पाता हूं, जहां एक फाइल है जिसे मैं चालू करना चाहता हूं लेकिन ... ओह, मुझे उस ऑपरेशन को करने के लिए कुछ अन्य निर्देशिका में chdir करने की आवश्यकता है।
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(मैं
%_%
अपने खरोंच पर्यावरण चर के रूप में उपयोग करना पसंद करता हूं।)
SET /?
कमांड प्रोसेसर द्वारा प्रदान किए गए अन्य छद्म चर देखने के लिए टाइप करें।
इसके अलावा लेख में टिप्पणियाँ इस तरह से उदाहरण के लिए स्कैन करने के लायक हैं (WayBack मशीन के माध्यम से, क्योंकि टिप्पणियां पुराने लेखों से चली गई हैं):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
इसमें% ~ dp0 के उपयोग को शामिल किया गया है:
यदि आप जानना चाहते हैं कि बैच फ़ाइल कहाँ रहती है:
%~dp0
%0
बैच फ़ाइल का नाम है।~dp
आपको निर्दिष्ट तर्क की ड्राइव और पथ देता है।
यह स्क्रिप्ट के पथ के बराबर है:
%~dp0
यह बैच पैरामीटर एक्सटेंशन सिंटैक्स का उपयोग करता है। पैरामीटर 0 हमेशा ही स्क्रिप्ट है।
यदि आपकी स्क्रिप्ट संग्रहीत है C:\example\script.bat
, तो इसका %~dp0
मूल्यांकन करता है C:\example\
।
ss64.com में पैरामीटर एक्सटेंशन सिंटैक्स के बारे में अधिक जानकारी है। यहाँ प्रासंगिक अंश है:
आप कमांड लाइन पर संख्यात्मक स्थिति के बाद% का उपयोग करके किसी भी पैरामीटर का मान प्राप्त कर सकते हैं।
[...]
जब किसी फ़ाइलनाम की आपूर्ति के लिए एक पैरामीटर का उपयोग किया जाता है तो निम्नलिखित विस्तारित सिंटैक्स लागू किया जा सकता है:
[...]
% ~ d1 केवल ड्राइव अक्षर पर% 1 का विस्तार करें - C:
[...]
% ~ p1 केवल एक पथ के लिए% 1 का विस्तार करें जैसे \ utils \ इसमें एक अनुगामी \ _ शामिल होता है, जिसे कुछ आदेशों द्वारा पलायन चरित्र के रूप में व्याख्या किया जा सकता है।
[...]
उपरोक्त संशोधक संयुक्त हो सकते हैं:
% ~ dp1 एक ड्राइव अक्षर और पथ पर% 1 का विस्तार करें
[...]
आप% 0 के साथ ही बैच स्क्रिप्ट का पाथनेम प्राप्त कर सकते हैं, पैरामीटर एक्सटेंशन इस पर लागू हो सकते हैं% ~ dp0 बैच स्क्रिप्ट जैसे ड्राइव और पाथ को लौटा देगा जैसे W: \ script \
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%