2010-11-03 11 views
6

मुझे एहसास है कि आप टोपी फाइलों में हैपर कैरेक्टरविंडोज बैच फ़ाइलों में एम्पर्सेंड से बचने

उदा।

echo a ^& b 
a & b 

लेकिन मैं आदेश

for /f "tokens=*" %%A IN ('DIR /B /A-D /S .acl') DO ProcessACL.cmd "%%A" 

जो सभी मौजूदा निर्देशिका में '.acl' नाम फ़ाइलें, या वर्तमान निर्देशिका की एक उपनिर्देशिका रही है उपयोग कर रहा हूँ।

समस्या यह है कि, मुझे पथ नाम मिल रहे हैं जिनमें '' वर्ण शामिल है (और नहीं, उनका नाम बदला नहीं जा सकता है), और मुझे एम्पर्सेंड से बचने और दूसरी बैच फ़ाइल को कॉल करने का एक तरीका चाहिए पैरामीटर के रूप में बच निकला पथ।

rem ProcessACL.cmd 
echo %1 

उत्तर

7

समस्या बचने वाली नहीं है, यह दूसरी लिपि में प्रतीत होती है।

अगर वहाँ

echo %1 

तरह की एक पंक्ति तो यह फैलता है और विफल रहता है:

echo You & me.acl 

बेहतर

setlocal EnableDelayedExpansion 
set "var=%~1" 
echo !var! 

तरह देरी विस्तार उपयोग करने के लिए भी विस्मयादिबोधक के साथ समस्याओं से बचने के लिए पैरामीटर में ! अंक, पहले set का उपयोग किया जाना चाहिए DisabledDelayedExpansion संदर्भ में।

set "var=%~1" 
setlocal EnableDelayedExpansion 
echo !var! 
+0

"&" के साथ फ़ाइलें अब काम करती हैं, लेकिन "!" वाली फ़ाइलें अब काम नहीं करता – ariel

+0

@ariel संकेत के लिए धन्यवाद, मैंने उस बिंदु के लिए भी एक समाधान जोड़ा – jeb

0

आपका लाइन होना चाहिए (ध्यान दें * .ACL)

for /f "tokens=*" %%A IN ('DIR /B /A-D /S *.acl') DO ProcessACL.cmd "%%A" 

ProcessACL.cmd पथ% 1 के साथ यह करने के लिए पारित कर दिया उपयोग कर सकते हैं के लिए।

// ProcessACL.cmd 
ECHO %1 

जो भी चर 1% द्वारा निहित है, पूरी तरह से निहित है। भागने की कोई ज़रूरत नहीं है। एस्केप बैच प्रोसेसर के लिए वर्णित वर्णों की व्याख्या करने के लिए हैं।

+1

आपकी प्रतिक्रिया के लिए धन्यवाद। '.acl' विशेष रूप से '.acl' नामक फ़ाइल की तलाश में है, न कि .acl के विस्तार वाली सभी फाइलें। मैं पहले से ProcessACL.cmd फ़ाइल में% 1 का उपयोग कर रहा हूं, और यह त्रुटि उत्पन्न करता है "और इस समय अप्रत्याशित था", जब% 1 में एक पथ होता है जिसमें एम्पर्सेंड शामिल होता है। – Bryan

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