2012-08-09 14 views
17

मैं बैच स्क्रिप्ट (एक पथ)"डबल कोट्स" बैच के इनपुट के अंदर पैरामीटर

runas /user:abc "icacls %1 /grant Everyone:(F) /T" 

जहां यह एक तर्क लेता में निम्नलिखित लेकिन तर्क %1 पहले से ही एक " शामिल (क्योंकि यह एक रास्ता है चलाना चाहते हैं , संदर्भ मेनू के द्वारा भेजा गया - मुझे इस पर अधिक नियंत्रण नहीं है)। तो जब आदेश बैच लिपि में चलाता है इसे इस तरह से चलाता है:

runas /user:abc "icacls "c:\folder" /grant Everyone:(F) /T" 

तो जाहिर है मैं %1 द्वारा बनाई " रों से बचने के लिए की जरूरत है। मैं %1 पर स्ट्रिंग मैनिपुलेशन कैसे कर सकता हूं जैसे कि यह उद्धरण से बच निकला?

उत्तर

20

आप \"Here उपयोग करने के लिए सक्षम होना चाहिए कुछ अन्य भागने पात्रों के साथ एक साइट है कि आप उपयोगी

स्ट्रिंग की जगह करने के लिए मिल सकती है है:

set temp=%1 
set temp=%temp:"=\"% 
echo %temp% 
+0

मैंने अधिक स्पष्टता के लिए प्रश्न संपादित किया है – laggingreflex

+5

क्या होगा यदि% 1 एक पथ है जिसमें रिक्त स्थान हैं? –

+0

आप '' ''' '' '' '' "का उपयोग कब करते हैं? मुझे बैच फाइलें मिलती हैं, वास्तव में केवल' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' भाषा जो एक बचने वाले चरित्र के रूप में पहचानती है)। तो क्या हम गैर-बैच प्रोग्राम्स में चर गुजरते समय '' '' और '' '' का प्रयोग करते हैं, और अन्य बैच स्क्रिप्ट्स (या 'बैच फ़ंक्शंस (उदा।' कॉल: फ़ंक्शन "पैरामीटर" "से बचने के दौरान" '' '' ' –

1
SET myPath=%1 
SET myPath=%myPath:"=\"% 
runas /user:abc "icacls %myPath% /grant Everyone:(F) /T" 

संपादित करें - परिवर्तनीय नाम path से myPath में बदल दिया गया था। पाथ एक आरक्षित सिस्टम वैरिएबल है जिसका उपयोग किसी भी चीज के लिए नहीं किया जाना चाहिए जिसका इरादा था।

+2

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

0

ऐसे मामलों में एक खोज/प्रतिस्थापन की भी आवश्यकता नहीं है। बस अपने तर्क से मूल उद्धरणों को पट्टी करें (%~1 के साथ) - फिर आप जो चाहें उसे फिर से जोड़ सकते हैं, उदा। बच निकले उद्धरण। आपके उदाहरण में:

runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T" 
5

प्रत्येक प्रतिक्रिया उत्तर का हिस्सा शामिल करती है। बैकस्लैश & उद्धरण का उपयोग कर उन्हें संयोजन: \" आपको मिलेगा:

runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T" 

या आप दोगुनी हो सकती है (डबल) उन्हें बचने के लिए उद्धरण:

runas /user:abc "icacls ""%~1"" /grant Everyone:(F) /T" 

एक तरफ ध्यान दें ^ के रूप में से बचने के लिए कभी-कभी उपयोगी है विशेष वर्ण जैसे <, |, >, ||, &&, और & ई के लिए xample:

echo ^| 

लेकिन यह बहुत दुर्लभ है।

+0

दोगुना डबल उद्धरण मेरे लिए काम नहीं करता है, लेकिन बैकस्लैश करता है। – SerG

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