2013-02-05 7 views
5

मेरी पहली पोस्ट, यहां तक ​​कि इस मित्रवत प्रदान किए गए ज्ञान का उपयोग करके पहले से ही हल किए गए अधिकांश प्रश्न हल किए गए हैं। लेकिन अब मैं cmd.exe में जहर पात्रों को संभालने के बारे में एक प्रश्न के साथ विचारों से बाहर चला गया।दिए गए चर में प्रतिशत संकेतों से बचें

मान लीजिए कि डबल कोट्स में संलग्न एक स्ट्रिंग वैरिएबल है। अधिकांश जहर पात्रों को पहले से ही सामान्य वर्णों द्वारा प्रतिस्थापित कर दिया गया है, स्क्रिप्ट को परेशान करने वाले बाएं लोग "&", "(", ")" और "%" हैं। स्ट्रिंग को बाद में कोट्स के बिना फ़ाइल में प्रतिबिंबित किया जाना चाहिए।

G:\YAET\20130204_Work>TryAmper.bat "100% Rock & Roll (7' UpMix)" 
=hyperlink("file://100 Rock & Roll (7' UpMix)";"LossLess") 
100 Rock & Roll (7' UpMix) 

G:\YAET\20130204_Work> 

मैं प्रतिशत जानते हैं कि: - लापता प्रतिशत चिह्न से अलग

@echo off & setlocal ENABLEEXTENSIONS 
SET AlbumArtist=%1 
CALL :EscapePoisonChars %AlbumArtist% AlbumArtist_VDN 

SET "FlacHyperLink==hyperlink^("file://%AlbumArtist_VDN%"^;"LossLess"^)") 
echo %FlacHyperLink% 
echo %AlbumArtist_VDN% 

endlocal &GOTO:EOF 

:EscapePoisonChars 
@echo off & setlocal ENABLEEXTENSIONS 
SET TmpString=%1 
SET TmpString=%TmpString:&=^^^&% 
SET TmpString=%TmpString:(=^^^(% 
SET TmpString=%TmpString:)=^^^)% 
endlocal&SET %2=%TmpString:~1,-1%&GOTO :EOF 

ऊपर मैं उम्मीद आउटपुट प्राप्त जब मैं अपने स्क्रिप्ट फोन: तो मैं विचार से बचने के लिए जहर पात्रों तीन गुना था खुद से बच सकते हैं। तो "%%" आम तौर पर एक शाब्दिक "%" की ओर ले जाएगा। लेकिन मेरे लिए प्रतिशत संकेतों के लिए एक कार्यस्थल प्रतिस्थापन प्रक्रिया खोजना संभव नहीं था क्योंकि cmd हमेशा इसे एक चर के रूप में व्याख्या करता है और इसे विस्तारित करने का प्रयास करता है। क्या यह इस मुद्दे को संभालने या परिवर्तनीय विस्तार की गलतफहमी को पूरा करने की पूरी गलत दिशा है? किसी भी संकेत का स्वागत है! धन्यवाद!

चीयर्स, मार्टिन

संपादित हटाया स्वयं के कोड, स्वच्छ समाधान के लिए जेब के जवाब नीचे देखें।

मदद के लिए धन्यवाद, मार्टिन

उत्तर

6

अच्छा सवाल!
सबसे पहले, हाँ आप प्रतिशत संकेतों को प्रतिस्थापित कर सकते हैं, लेकिन प्रतिशत विस्तार के भीतर नहीं, आपको यहां देरी से विस्तार की आवश्यकता है।

Setlocal EnableDelayedExpansion 
set tmpstr=!tmpstr:%=%%! 

लेकिन अगर आप देरी विस्तार का उपयोग करें, आप पलायन अब, की जरूरत नहीं है के रूप में देरी विस्तार बैच पार्सर के अंतिम चरण है और सभी पात्रों किसी भी विशेष अर्थ खो देते हैं।
आपको केवल देरी से विस्तार के साथ गूंजने की आवश्यकता है।

Echo !tmpvar! 

संपादित करें: स्वच्छ समाधान

@echo off 
setlocal DisableDelayedExpansion 

REM * More or less secure getting the parameter 
SET "AlbumArtist=%~1" 

setlocal EnableDelayedExpansion 
SET "FlacHyperLink==hyperlink("file://!AlbumArtist!";"LossLess")" 

echo !FlacHyperLink! 
echo !FlacHyperLink!> hugo.txt 

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

+0

जेब, मुझे आशा है कि आप [लिंक] (http://ss64.org/viewtopic.php?pid=4919#p4919) को अपने अविश्वसनीय हैक के साथ जवाब देने के बाद जवाब देंगे, मैं अभी भी पूरी तरह से समझ में नहीं आता हूं। आखिर में आपके सुझाव ने ज़हर के पात्रों के साथ अपने मुद्दे को हल किया। मैंने अपने प्रश्न के समाधान के आधार पर एक छोटा कोड स्निपेट जोड़ा क्योंकि मैं कोड ब्लॉक प्रारूप का उपयोग करना चाहता हूं। आपका बहुत बहुत धन्यवाद! मार्टिन – CmdQuestion

+0

आर्ग - आपने क्या किया? मैंने _clean_ समाधान – jeb

+0

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

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