2013-01-01 17 views
14

मेरे पास एक चर है जिसमें एम्परसैंड हैं और मुझे एक और वैरिएबल बनाने की आवश्यकता है जिसमें पहला वाला शामिल है। मुझे पता है कि "&" वर्ण can be escaped with carret (^) लेकिन मुझे नहीं पता कि एक चर के अंदर पाठ से कैसे बचें।चर में एम्पर्सेंड से बचें - जीत बैच

set Name1 = Red ^& Green 
set Name2 = %Name1% ^& Blue 

'ग्रीन' एक आंतरिक या बाहरी कमांड, प्रचलित कार्यक्रम या बैच फ़ाइल के रूप में मान्यता प्राप्त नहीं है।

मैं एम्पर्सेंड युक्त चर को "गूंज" भी नहीं कर सकता - मुझे एक ही त्रुटि मिलती है।

मैं क्रम में चर का उपयोग करने के लिए उत्पादन के लिए उनकी सामग्री टाइप करने के लिए या

type "%Name1%.txt" 
type "%Name2%.txt" 

उत्तर

18

सरल समाधान के कार्य के लिए उद्धरण चिह्नों का उपयोग करने के लिए है, और विस्तार में देरी की। यह भागने की किसी भी जरूरत को समाप्त करता है।

@echo off 
setlocal enableDelayedExpansion 
set "Name1=Red & Green" 
set "Name2=!Name1! & Blue" 
echo !Name2! 

यदि आपके पास उद्धृत और निर्विवाद पाठ का मिश्रण है, तो आपको कभी-कभी कुछ पात्रों से बचना होगा। लेकिन प्रारंभिक असाइनमेंट के लिए केवल इसकी आवश्यकता है। विलंब विस्तार का उपयोग करते समय किसी चर की सामग्री को कभी भी बचने की आवश्यकता नहीं है।

for /f "delims= usebackq" %a in (`echo "First & ? * Last"`) do echo # %~a 

... एक बैच लिपि में:

@echo off 
setlocal enableDelayedExpansion 
set var="This & that" ^& the other thing. 
echo !var! 
+0

enableDelayedExpansion का उपयोग करके मुझे चर का उपयोग करने की अनुमति मिलती है। इसलिए -> टाइप करें "% Name1% .txt" <- काम करता है। इस पल के लिए यह सबसे अच्छा समाधान की तरह दिखता है।धन्यवाद – BearCode

+0

सबसे आसान समाधान नहीं है, –

5

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

set Name1=Red ^^^& Green 
set Name2=%Name1% ^& Blue 

लेकिन जब नाम 2 का उपयोग किया जाता है तो आपको एस्केप का एक और सेट जोड़ने की भी आवश्यकता होगी। जो एक बड़ा दर्द हो जाता है।

set Name1=Red ^^^^^& Green 
set Name2=%Name1% ^^^& Blue 

या उपयोग कोटेशन (अनुशंसित)

set "Name1=Red ^& Green" 
set "Name2=%Name1% ^& Blue" 
0

दो समाधान मन के लिए आते हैं, जिनमें से न तो पर्याप्त रूप से सामान्य है, लेकिन वे दोनों "काम":

  1. हमेशा रखना उद्धरणों में चीजें और जब आपको पिछले समाधान में उल्लेख किया गया है, तो उन्हें हटा दें।
  2. फिर से बोली & की: सेट NAME2 =% name1: & =^&%^& ब्लू
+1

# 2 नहीं करता है के लिए वाक्यविन्यास ओटी से बचने के लिए बहुत कम सेवा नहीं करते हैं उसकी। –

-2

सरल समाधान यह एक होगा

for /f "delims= usebackq" %%a in (`echo "First & ? * Last"`) do echo # %%~a 

या

for /f "delims= usebackq" %%a in (`echo "%~1"`) do echo # %%~a 
+0

से नीचे मेरा उत्तर देखें यह प्रश्न का उत्तर नहीं देता है, जो पर्यावरण चर के बारे में है – dbenham

+0

इस पृष्ठ पर "पर्यावरण" शब्द का भी उल्लेख किया गया है? आपके उत्तर के विपरीत मेरा वास्तव में इनपुट पैरामीटर शामिल करता है। आपका केवल हार्डकोडेड तारों के साथ काम करता है। मुझे लगता है कि कोई यहां थोड़ा कड़वा है ... –

+0

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

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