एसीनी ने मुझे अपने पहले समाधान में हराया। उद्धरण जोड़कर इसे बेहतर किया जा सकता है ताकि स्ट्रिंग में रिक्त स्थान और विशेष वर्ण हो और फिर भी सही परिणाम दें।
दूसरा समाधान कर रहे हैं विचित्र वाक्य रचना है, लेकिन अवधारणा काफी सीधे आगे है। "स्ट्रिंग" के साथ फॉर/एफ लाइनफीड वर्णों पर टूट जाएगा - प्रत्येक पंक्ति को अपनी स्ट्रिंग के रूप में संसाधित किया जाएगा। यह चाल :
डिलीमीटर को लाइनफ़ेड वर्ण के साथ प्रतिस्थापित करने के लिए है। ध्यान दें कि नीचे दिए गए समाधान में खाली रेखा का एक महत्वपूर्ण हिस्सा है मुश्किल प्रतिस्थापन। साथ ही, निम्नलिखित पंक्ति !
से शुरू होनी चाहिए जो देरी परिवर्तनीय विस्तार को समाप्त कर दे। कोई भी प्रमुख स्थान नहीं होना चाहिए।
चिंता करने की दूसरी बात यह है कि फिसकी फॉर/एफ "ईओएल" विकल्प है। हम ईओएल चरित्र से शुरू होने वाले किसी भी मूल्य को छोड़ना नहीं चाहते हैं जो डिफ़ॉल्ट रूप से ;
है। चूंकि हमने स्ट्रिंग डेलीमीटर :
को समाप्त कर दिया है, इसलिए हम इसे ईओएल के रूप में सुरक्षित रूप से उपयोग कर सकते हैं।
अंत में, हमें देरी से विस्तार का उपयोग करने की आवश्यकता है, लेकिन !
%% एस विस्तार के दौरान दूषित हो जाएगा यदि हम पहले लूप के भीतर देरी विस्तार को अक्षम नहीं करते हैं।
set "str=foo bar:biz bang:this & that "^& the other thing!":;How does this work?"
setlocal enableDelayedExpansion
set ^"str=!str::=^
!"
for /f "eol=: delims=" %%S in ("!str!") do (
if "!!"=="" endlocal
echo %%S
)
मेरा मानना है कि यह तकनीक उस चीज़ के बारे में कुछ भी संभाल सकती है जो आप इसे फेंकते हैं।
जेब मुझे दिखाने के लिए पहला था कि बैच के भीतर लाइन फीड के साथ कैसे काम करना है, और विशेष रूप से इस तकनीक का उपयोग कैसे करें। यह एसओ पर कहीं और कहीं भी पोस्ट किया जा सकता है।
+1 बहुत आसान! –