2010-01-13 12 views
7

यह संशोधित चर नामों के साथ एक सरलीकृत उदाहरण है जो मैं करना चाहता हूं। सादगी के लिए भी, मैं बैट फ़ाइल संस्करण की बजाय कमांड लाइन संस्करण दिखा रहा हूं।आप डॉस के भीतर पर्यावरण परिवर्तनीय विस्तार को कैसे दबाते हैं?

मैं निम्नलिखित कर रहा हूं।

> echo %foo% 

%foo% 

हालांकि, अगर foo एक वैध वातावरण चर है, मैं वांछित नहीं मिलता निर्गम (% foo%) वातावरण चर विस्तार के कारण।

> set foo=bar 
> echo %foo% 
> echo %%foo%% 

bar 
%bar% 

अब, मैं (उदाहरण के बाद) करने के लिए यह एक हैक है, लेकिन अगर वहाँ या तो उत्पादन एक '%' चरित्र या वातावरण चर विस्तार को दबाने के लिए करने के लिए एक क्लीनर तरीका है मैं सोच रहा था।

> set foo=bar 
> set percent=% 
> echo %percent%foo%percent% 

%foo% 

इसके अलावा, अगर आवश्यक समाधान एक बल्ला फ़ाइल में अलग है (जैसे %% के बजाय% या% 1% बल्कि% 1 से) तो कृपया मुझे बताएं।

मेरा वास्तविक उपयोग केस वैश्विक पर्यावरण चर सेट करने के लिए एसईटीएक्स के साथ एक बल्ले फ़ाइल में है जो उनके भीतर विस्तारित करने के लिए किसी अन्य पर्यावरण चर पर भरोसा करता है।

+0

क्या आप समझा सकते हैं "जो उनके भीतर विस्तारित होने के लिए किसी अन्य पर्यावरण चर पर भरोसा करते हैं।" क्या आप कुछ नेस्टेड विस्तार चाहते हैं लेकिन अन्य समान समान स्ट्रिंग में नहीं हैं? – cdkMoose

+0

@cdkMoose: मैं एक वैश्विक env सेट करना चाहता हूँ। var 'FOO_SDK_BIN =% FOO_SDK%/BIN' जैसा कुछ हो लेकिन SETX के साथ '% FOO_SDK%' का विस्तार न करें। फिर यदि मैं SETX के साथ FOO_SDK चर पथ बदलता हूं, तो उस पर भरोसा करने वाले सभी चर ठीक से दोहराए जाएंगे। यह सिर्फ विकास मशीनों के समूह के सेटअप को सरल बनाने के लिए एक स्क्रिप्ट बनाने के लिए है जहां हम एक तृतीय पक्ष एसडीके का उपयोग करते हैं जिसमें इस तरह के कुछ एनवी चर हैं जो सभी को एक env var के लिए रूट किया जा सकता है। – Adisak

+0

मैं एसईटीएक्स के साथ familair नहीं हूँ, लेकिन ऐसा लगता है कि आप sying हैं कि आप एसईटीएक्स के साथ विस्तार नहीं करना चाहते हैं "मैं एक वैश्विक env। Var सेट करना चाहता हूं जैसे FOO_SDK_BIN =% FOO_SDK%/BIN लेकिन विस्तार नहीं एसईटीएक्स के साथ% FOO_SDK%। " लेकिन बाद में आप एसईटीएक्स का उपयोग कर चर के पीछे मूल्य बदलने के बाद इसे विस्तारित करना चाहते हैं। किसी भी एक बयान में, यह या तो विस्तार करेगा या नहीं बल्कि दोनों नहीं। – cdkMoose

उत्तर

6

बैच फ़ाइल में, echo %% foo %%% foo% उत्पन्न करेगा।

c:\01Temp>type foo.bat 
@echo %%foo%% 

c:\01Temp>foo 
%foo% 

c:\01Temp> 
+1

डी ओह! मुझे फेंक दिया गया था क्योंकि अगर foo सेट किया गया है तो यह कमांड लाइन पर काम नहीं करता है (%% foo %% कमांड लाइन पर% bar% तक फैलता है)। क्या हैक (सेट प्रतिशत =%) के अलावा कमांड लाइन पर ऐसा करने का कोई तरीका है? – Adisak

1

एक बैच फ़ाइल के भीतर, उदाहरण के लिए: दो %% s का उपयोग, .:

set foo=1 
echo %%foo%% 

... गूँज "% foo%", नहीं "1"। मुझे तत्काल मोड में अक्षम करने के तरीके से अवगत नहीं है (उदा।, बैच फ़ाइल में नहीं)।

+0

हाँ, मुझे फेंक दिया गया था क्योंकि यह जिस तरह से मैं तत्काल मोड में चाहता था, काम नहीं कर रहा था इससे कोई फर्क नहीं पड़ता कि मैं कितनी% पंक्ति में था। – Adisak

संबंधित मुद्दे