इस मान लें कि आप स्ट्रिंग ^&AntiBatchfileString
सचमुच चाहते हैं, है सबसे अच्छा set
वाक्य रचना, के रूप में सबसे विशेष वर्ण (^
&
(
)
<
>
|
और भी मानक सीमांकक ,
;
=
अंतरिक्षटैब) अपने विशेष अर्थ खो देते हैं जैसे हीके बीच थर्म को रखा जाता है, और ""
स्वयं वेरिएबल मान का हिस्सा नहीं बनते:
set "pass=^&AntiBatchfileString"
यह केवल जब तक आदेश एक्सटेंशन पर काम करता है, जो Windows डिफ़ॉल्ट वैसे भी (प्रकार cmd /?
और /E
विकल्प देखें)।
"%pass%"
(""
संलग्न करने के साथ) एक चर का विस्तार (पढ़ना), विशेष वर्णों का अभी भी शाब्दिक व्यवहार किया जाता है।
हालांकि, जैसे ही आप इसे %pass%
(""
) जैसे विस्तारित करते हैं, वे अपना विशेष अर्थ वापस लेते हैं। तो अगर आप निम्न विकल्प हैं:
- उपयोग
set "pass=^^^&AntiBatchfileString"
, जहां ^^
निकल जाता शाब्दिक ^
और ^&
शाब्दिक &
जब %pass%
की तरह पढ़ने।
- देरी विस्तार को सक्षम करें (
set /?
देखें कि यह कैसे काम करता है और setlocal /?
या cmd /?
इसे सक्षम करने के तरीके के बारे में), जहां वैरिएबल मान का विस्तार किया जाता है (पढ़ा जाता है) जहां विशेष वर्णों का पार्सिंग पूरा हो चुका है।
मैं, बाद दृष्टिकोण पसंद करते हैं क्योंकि कोई विशेष एस्केपिंग आवश्यक है, और यह भी "
स्ट्रिंग मान (यहां तक कि unsymmetrically मौजूद होने पर) में प्रदर्शित होने के साथ सौदा कर सकते हैं।
वैसे, "
^"
से भी बच निकला जा सकता है, जब तक यहसे अनदेखा नहीं होता है।
फिर भी, %
संकेत एक बैच फ़ाइल में ^%
तरह बच गए नहीं किया जा सकता है, लेकिन आप या नहीं, स्ट्रिंग ""
के बीच में है एक शाब्दिक एक-एक, स्वतंत्र पाने के लिए उन्हें %%
तरह दोगुना करने की जरूरत है।
ध्यान दें कि कंसोल पर, %%
काम नहीं करता है हालांकि ^%
करता है। (इसलिए यह केवल जब सक्षम करने के लिए
अंत में, शाब्दिक !
देरी विस्तार सुविधा द्वारा सक्षम किए जाने पर खपत होती है, इसलिए आप समझदारी से देरी विस्तार टॉगल करके ^!
की तरह उनमें से बचने के लिए, या भी द्वारा, मामले में उन लोगों के लिए विशेष रूप से ध्यान देने की आवश्यकता वास्तव में इसकी आवश्यकता होती है और इसे अन्यथा अक्षम करने के लिए, जब एक शाब्दिक स्ट्रिंग प्रदान की जाती है, जैसे set
कमांड लाइन, उदाहरण के लिए, %pass%
जैसे मानक चर का विस्तार करते समय और %%I
(बैच फ़ाइल) या %I
(कंसोल)), उदाहरण के लिए)। बेशक यह अंतिम समाधान भी नहीं है, क्योंकि आपको setlocal
और endlocal
की आवश्यकता है ताकि विलंब विस्तार को सक्षम/अक्षम किया जा सके, जिसका उद्देश्य पर्यावरण परिवर्तनों को स्थानांतरित करना है, इसलिए setlocal
कमांड के बाद से कोई भी परिवर्तनीय परिवर्तन endlocal
निष्पादित हो गया है (हालांकि endlocal
अवरोध पर परिवर्तनीय मान को पार करने के लिए कुछ युक्तियां हैं)।
[बैच कैरेक्टर एस्केपिंग] का संभावित डुप्लिकेट (https://stackoverflow.com/questions/6828751/batch-character-escaping) –