2010-08-26 12 views
7

निम्नलिखित में एक चर करने के लिए न्यू लाइन चरित्र नियत बैच स्क्रिप्ट मैं लिखा हैएक बैच स्क्रिप्ट

@echo off 
setlocal enabledelayedexpansion 
set finalcontent= 
For /F "tokens=1-2* delims= " %%I in (abc.txt) do (
IF %%J EQU MAJORVER (
set currentline=%%I %%J %1 
set finalcontent=!finalcontent!!currentline! 
) ELSE IF %%J EQU MINORVER (
set currentline=%%I %%J %2 
set finalcontent=!finalcontent!!currentline! 
) ELSE IF %%J EQU BUILDNUM (
set currentline=%%I %%J %3 
set finalcontent=!finalcontent!!currentline! 
) ELSE (
set currentline=%%I %%J %%K%NL% 
set finalcontent=!finalcontent!!currentline! 
) 
) 
echo %finalcontent%>>xyz.txt 

मैं एक नई पंक्ति चरित्र चर currentline के हर घटना के अंत में संलग्न चाहते हैं। क्या कोई मुझे इस पर मार्गदर्शन कर सकता है?

उत्तर

5

इस प्रकार आप न्यू लाइन को परिभाषित कर सकते हैं:

set newline=^& echo. 

उसके बाद, आप, इस तरह गूंज बयान में न्यू लाइन का उपयोग कर सकते हैं: (उल्लिखित स्थिति में लागू नहीं है, तथापि)

echo %finalcontent%%newline% 

या आप इस तरह प्रत्येक सेट बयान में न्यू लाइन का उपयोग कर सकते: (अतिरिक्त कैरट मन)

set finalcontent=!finalcontent!!currentline!^!newline! 

या इसी तरह:

set currentline=%%I %%J %1^%newline% 
+1

मैंने मूल रूप से इसे -1 के रूप में चिह्नित किया क्योंकि मुझे बाद में पता चला कि यह काम करता है लेकिन EnableDelayedExpansion (AKA! Var!% Var% के बजाय) के साथ नहीं। शायद बोल्ड में शीर्ष पर अपने उत्तर में जोड़ने पर विचार करना चाहें। इसलिए मैं इसे ऊपर उठा सकता हूं, जब तक कि उत्तर संपादित नहीं किया जाता है, मैं अपना वोट नहीं बदल सकता। ;) –

16

आप एक वास्तविक न्यूलाइन चरित्र बना सकते हैं और इसे एक चर के लिए असाइन कर सकते हैं।

setlocal EnableDelayedExpansion 
set LF=^ 


rem TWO empty lines are required 
echo This text!LF!uses two lines 

न्यू लाइन सबसे अच्छा देरी विस्तार के साथ काम करता है, तो आप भी प्रतिशत विस्तार के साथ उपयोग कर सकते हैं, लेकिन तब यह थोड़ा और अधिक जटिल है।

set LF=^ 


rem TWO empty lines are required 
echo This text^%LF%%LF%uses two lines 
echo This also^ 

uses two lines 

यह कैसे काम करता है?
देखभाल एक बचने वाला चरित्र है, यह अगले चरित्र से बच निकलता है और खुद को हटा दिया जाता है।
लेकिन यदि अगला चरित्र एक लाइनफीड है तो लाइनफीड भी हटा दिया जाता है और केवल अगला चरित्र प्रभावी रूप से बच निकला है (भले ही यह एक लाइनफीड भी हो)।

इसलिए, दो खाली लाइनों के लिए आवश्यक हैं, LF1 नजरअंदाज कर दिया है LF2 बच रहा है और LF3 "पंक्ति" खत्म करने के लिए आवश्यक है।

set myLinefeed=^<LF1> 
<LF2> 
<LF3> 

संकेत:
यह न्यू लाइन चर परिभाषा के एक काफी अलग प्रारूप, उपयोग करने के लिए एक अनजाने आवश्यक खाली लाइनों का विलोपन से बचने के लिए अक्सर बेहतर है।

(SET LF=^ 
%=this line is empty=% 
) 

मैंने अक्सर खाली लाइनों में से एक को हटा दिया है और फिर मैंने हमेशा खोज की है कि मेरा प्रोग्राम अब और क्यों काम नहीं कर रहा है।

और पैरानोइड संस्करण व्हाइटसाइट्स या अन्य कचरे के लिए न्यूलाइन चर भी जांचता है।

if "!LF!" NEQ "!LF:~0,1!" echo Error "Linefeed definition is defect, probably multiple invisble whitespaces at the line end in the definition of LF" 

FOR /F "delims=" %%n in ("!LF!") do (
    echo Error "Linefeed definition is defect, probably invisble whitespaces at the line end in the definition of LF" 
) 
+1

यह गर्म है। मैं हमेशा इस भाषा का उपयोग कर रहा हूं, और मैं लगभग साप्ताहिक रूप से नई चीजें सीखता हूं। आश्चर्यजनक है कि कितने छोटे quirks है। धन्यवाद – user1167442

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