MS-DOS चर को अपरिभाषित कैसे करें?


88

कहते हैं कि मैं CMD शेल में निम्नलिखित कार्य करता हूं:

set FOO=bar

क्या सीएमडी शेल को रिसाइकल करने के अलावा इस वैरिएबल को अपरिभाषित करने का कोई तरीका है?


9
आप क्या वास्तव में मतलब MS-DOS (जो कम से कम 10 या इतने वर्षों के लिए मौत हो चुकी है) - या आप कह MS-DOS , लेकिन वास्तव में विंडोज कमांड लाइन मतलब ( cmd.exe) ??
marc_s

4
शायद, लेकिन यह वास्तव में उस सवाल के लिए मायने नहीं रखता है ...
मदारा का भूत

3
मार्क का अधिकार। यह MS-DOS शेल नहीं है। लोग कभी नहीं सीखते हैं कि यह एक बड़ा अंतर है।
माइकल-ओ

@MadaraUchiha, वास्तव में, आपका set var=उत्तर MS-DOS 6.22 के तहत काम करता है, जैसा कि यह विंडोज़ cm3.exe के तहत करता है। (हालांकि, विंडोज के विपरीत, दोहरे उद्धरण चिह्नों वर के आसपास डाल = काम नहीं करता, बजाय यह एक वातावरण चर जिसका नाम एक दोहरे उद्धरण के साथ शुरू होता पैदा करता है।)
साइमन Kissane

जवाबों:


136

हां, आप इससे परेशान हो सकते हैं

set FOO=

या स्पष्ट रूप से उपयोग कर रहा है:

set "FOO="

सुनिश्चित करें कि =निशान के बाद कोई अनुगामी (अदृश्य) वर्ण न आए । अर्थात्:

  • set FOO=से अलग है set FOO=      

29

चर को अनसेट करने का एक सुरक्षित तरीका उद्धरणों का भी उपयोग करना है, फिर अनुगामी रिक्त स्थान के साथ समस्याएं नहीं हैं।

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%

11

एक और तरीका

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

नोट: यह एक इंटरैक्टिव कमांड प्रॉम्प्ट पर काम नहीं करेगा। लेकिन बैच स्क्रिप्ट में काम करता है।


9

यह मेरे विंडोज 7 CMD शेल में मेरे लिए काम करता है:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it

2
setकमान में रिक्त स्थान महत्वपूर्ण हैं । यदि आप कोशिश करते हैं set FOO = barऔर फिर कोशिश करते हैं set FOO=, तो यह 'FOO' को परेशान नहीं करेगा। किसी कारण के लिए, हालांकि, वे (जैसे?) महत्वपूर्ण अंदर नहीं हैं % %
टेड हॉप

ट्रेलिंग स्पेस भी महत्वपूर्ण है। संपादन के लिए क्षमा करें, मुझे लगा कि आपके प्रतिनिधि ने 270 नहीं, 270k ... उफ़ कहा। जब उपयोगकर्ता सुझाव नहीं दे रहा है तो मैं अक्सर जवाब संपादित करता हूं। जाहिर है यहां मामला नहीं। मेरी गलती।
chappjc

@chappjs कोई समस्या नहीं है, संपादन के लिए धन्यवाद! यकीन नहीं होता कि मैं कैसे चूक गया।
पेक्का

4

मैं केवल एक टिप्पणी के रूप में निम्नलिखित की पेशकश करूंगा, लेकिन मुझे लगता है कि यह महत्वपूर्ण है कि यह अपने आप खड़ा हो।

पिछले जवाबों में से एक ने उल्लेख किया है कि किसी को रिक्त स्थान से सावधान रहने की आवश्यकता है; और यह सुनिश्चित करने के लिए कि यह सच है। हालाँकि मैंने पाया है कि कभी-कभी ट्रेलिंग स्पेस बस वहाँ जाना चाहते हैं, कोई फर्क नहीं पड़ता कि क्या - विशेष रूप से अगर आप कमांड लाइन वन-लाइनर कर रहे हैं और कमांड सेपरेटर के रूप में स्पेस की आवश्यकता है।

यह उस समस्या का हल है:

SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%

इस तरह से दोहरे उद्धरण चिह्नों में लपेटकर, रिक्ति के मुद्दे को पूरी तरह से टाला जा सकता है। यह वास्तव में भी उपयोगी हो सकता है जब चर को बीच में रिक्त स्थान को खत्म करने के लिए बनाया जाता है - उदाहरण के लिए - पथ, उदाहरण के लिए:

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.