बैच फ़ाइल में एक चर को परिभाषित करना और उपयोग करना


450

मैं एक बैच फ़ाइल में एक चर को परिभाषित करने और उपयोग करने की कोशिश कर रहा हूं। ऐसा लगता है कि यह सरल होना चाहिए:

@echo off

set location = "bob"
echo We're working with "%location%"

मुझे मिलने वाला आउटपुट निम्नलिखित है:

We're working with ""

यहाँ क्या चल रहा है? मेरे चर को प्रतिध्वनित क्यों नहीं किया जा रहा है?

जवाबों:


552

=नाम के पहले भाग के रूप में व्याख्या की गई जगह, और उसके बाद के स्थान (साथ ही उद्धरण चिह्नों) को मूल्य के हिस्से के रूप में व्याख्या की जाती है। तो आपके द्वारा बनाए गए चर को संदर्भित किया जा सकता है %location %। यदि आप ऐसा नहीं चाहते हैं, तो परिभाषा में अतिरिक्त स्थान को हटा दें।


7
यदि नाम के पहले =भाग को व्याख्यायित किया जाता है तो चर को संदर्भित नहीं किया जा सकता है %location%, इसे संदर्भित करना होगा %location %। क्या वह टाइपो है?
दु:

7
@ उचित चर: आप सही हैं; ऐसा लगता है कि मूल उत्तर एक गलत संपादन का शिकार हुआ।
ब्रायन निक्सन

18
तो यह वही है जो एमएस के साथ आया था
फलाक

5
@ फाल्के जैसा कि alias x = y* निक्स लैंड में है?
बेसिक

1
@ फाल्के तो आपको क्या लगता है कि बैश दौड़ते समय क्या करेगा x = y?
फुल्विक

263

रिक्त स्थान महत्वपूर्ण हैं। आपने एक वैरिएबल बनाया है जिसका 'location ' मान है
' "bob"'नोट - स्थान के स्थान को दर्शाने के लिए एकल उद्धरण संलग्न किए गए।

यदि आप अपने मूल्य में उद्धरण चाहते हैं, तो आपका कोड जैसा दिखना चाहिए

set location="bob"

यदि आप उद्धरण नहीं चाहते हैं, तो आपका कोड दिखना चाहिए

set location=bob

या अभी तक बेहतर है

set "location=bob"

अंतिम सिंटैक्स अनजाने अनुगामी रिक्त स्थान को मान में जाने से रोकता है, और विशेष वर्णों जैसे & |आदि से भी बचाता है ।


8
क्या अंतिम सिंटैक्स के लिए कोई डाउनसाइड है?
वुल्फ

8
@ भेड़िया - नहीं, कोई नकारात्मक पहलू नहीं है। हालांकि, यह सबसे प्रभावी होने की सीमा है। जब तक मूल्य में उद्धरण शामिल नहीं होते हैं, तब तक लगभग कोई भी पात्र भागने की चिंता किए बिना मूल्य में प्रकट हो सकता है। अपवाद हैं %, और संभवतः !यदि विलंबित विस्तार सक्षम है। लेकिन अगर मूल्य उद्धरण चिह्न करता है, तो आप जब की तरह जहर अक्षरों से बचने के बारे में चिंता करनी चाहिए |, &आदि
dbenham

1
यह विंडोज़ में पर्यावरण-चर सेट करने के समान ही प्रतीत होता है। क्या यह बैच स्क्रिप्ट में स्थानीय-चर का उपयोग करने का एकमात्र तरीका है?
पैरा

1
@Wolf, आपको केवल यह सुनिश्चित करना है कि कमांड एक्सटेंशन सक्षम हैं, लेकिन यह वैसे भी डिफ़ॉल्ट कॉन्फ़िगरेशन है ...
aschipfl

7

इनपुट location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

उत्पादन

We're working with bob

(गलतियों यू किया: spaceऔर " ")


4
set /pउपयोगकर्ता को संकेत देता है और निर्दिष्ट चर में उत्तर संग्रहीत करता है। उदाहरण के लिए,set /p name="What is your name? " & echo Hello, %name%.
रॉबर्ट मूनी

6
-1, वाक्य-विन्यास set /p "varname"="text"गलत है, यह एक चर नाम बनाता है location"(अनुगामी उद्धरण के साथ!)। यह होना चाहिए set /p location="bob"। लेकिन फिर भी, यह अब सवाल से मेल नहीं खाता
jeb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.