आप अपने बैच फ़ाइल आउटपुट से एक नई पंक्ति कैसे डाल सकते हैं?
मैं कुछ ऐसा करना चाहता हूं:
echo hello\nworld
जो उत्पादन होगा:
hello
world
echo Yes&echo No
आप अपने बैच फ़ाइल आउटपुट से एक नई पंक्ति कैसे डाल सकते हैं?
मैं कुछ ऐसा करना चाहता हूं:
echo hello\nworld
जो उत्पादन होगा:
hello
world
echo Yes&echo No
जवाबों:
echo hello & echo.world
इसका मतलब है कि आप & echo.
एक newline के लिए एक स्थिरांक के रूप में परिभाषित कर सकते हैं \n
।
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
बेहतर प्रदर्शन के लिए है (फिर भी कोई स्पेस माइंड नहीं है)। ईसीएचओ
उपयोग:
echo hello
echo.
echo world
echo "Makefile contents (which has \n)" > Makefile
कई इकोस के साथ मेकफाइल जेनरेट कर रहा हूँ , यह काम नहीं करेगा
(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
और फिर echo line 2 >> Makefile
। >>
आउटपुट के कारण फ़ाइल में जोड़ा जा सकता है, जो कि इस मामले के लिए आपके द्वारा आवश्यक व्यवहार है।
यहां आप जाएं, इसमें निम्नलिखित के साथ एक .bat फ़ाइल बनाएं:
@echo off
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
REM Example Usage:
echo There should be a newline%NL%inserted here.
echo.
pause
आपको निम्न की तरह आउटपुट देखना चाहिए:
There should be a newline
inserted here.
Press any key to continue . . .
आपको केवल REM कथनों के बीच कोड की आवश्यकता है, जाहिर है।
set nl=^&echo.
, तो बस echo hello %nl% world
एक ही प्रभाव पैदा करता है।
echo:
खाली लाइन लिखने के लिए cmd / bat-files में एक मानक सुविधा है, जो आपके cmd- आउटपुट में एक नई लाइन का अनुकरण करती है:
@echo off
@echo line1
@echo:
@echo line2
सेमी-फाइल के ऊपर उद्धृत उद्धृत का आउटपुट:
line1
line2
echo(
। ऐसा लगता है कि यह समस्याएं पैदा कर सकता है, लेकिन यह वास्तव में पूरी तरह से काम करता है। अन्य सभी रूपों में कम से कम एक स्थिति होती है जहां कमांड वांछित के रूप में प्रदर्शन नहीं करेगा।
ECHO(
विफल हो।
echo
, और उनके प्रभाव क्या हैं?"
केन के उत्तर की तरह, लेकिन विलंबित विस्तार के उपयोग के साथ।
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
पहले एक एकल लाइनफ़ीड वर्ण बनाया जाता है और उसे \ n चर में सौंपा जाता है।
यह लाइन अंत में कार्यवाहक के रूप में काम करता है, अगले चरित्र से बचने की कोशिश करता है, लेकिन यदि यह एक लाइनफीड है तो इसे नजरअंदाज कर दिया जाता है और अगले चरित्र को पढ़ा जाता है और बच जाता है (भले ही यह एक लाइनफीड भी हो)।
तब आपको वर्तमान निर्देश को समाप्त करने के लिए तीसरी लाइनफीड की आवश्यकता होती है, अन्यथा तीसरी लाइन को एलएफ-चर से जोड़ा जाएगा।
यहां तक कि बैच फ़ाइलों में CR / LF के साथ लाइन अंत है केवल LF महत्वपूर्ण हैं, क्योंकि Parser के इस चरण में CR को हटा दिया गया है।
विलंबित विस्तार का उपयोग करने का लाभ यह है, कि इसमें कोई विशेष चरित्र हैंडलिंग नहीं है।
echo Line1%LF%Line2
विफल होगा, क्योंकि पार्सर सिंगल लाइनफीड पर पार्स करना बंद कर देता है।
SO पर अधिक स्पष्टीकरण हैं : Vista / DOS बैच (.bat) फ़ाइल में कई लाइनों पर लंबी कमांड विभाजित होती है
SO: विंडोज कमांड इंटरप्रेटर (CMD.EXE) पार्स स्क्रिप्ट कैसे करता है?
संपादित करें: से बचें echo.
यह सवाल का जवाब नहीं देता है, क्योंकि सवाल एकल के बारे में था echo
जो कई लाइनों को आउटपुट कर सकता है।
लेकिन अन्य उत्तरों के बावजूद जो echo.
एक नई लाइन बनाने का उपयोग करने का सुझाव देता है , यह ध्यान दिया जाना चाहिए कि echo.
यह सबसे खराब है, क्योंकि यह बहुत धीमा है और यह पूरी तरह से विफल हो सकता है, क्योंकि cmd.exe नाम की एक फ़ाइल की खोज करता है ECHO
और इसे शुरू करने का प्रयास करता है।
सिर्फ एक खाली लाइन की छपाई के लिए, आप इनमें से किसी एक का उपयोग कर सकते हैं
echo,
echo;
echo(
echo/
echo+
echo=
लेकिन के उपयोग echo.
, echo\
या echo:
, बचा जाना चाहिए के रूप में वे वास्तव में धीमी गति से हो सकता है, स्थान जहां स्क्रिप्ट नेटवर्क डिस्क की तरह, निष्पादित किया जाएगा के आधार पर।
call :pause line1!\n!line2
, सबरूटीन को setlocal EnableDelayedExpansion
इसके साथ शुरू करें और setlocal DisableDelayedExpansion
समय-समय पर व्याख्या की जा रही नई कहानियों को रखने के लिए इसे समाप्त करें ।
echo,
echo;
echo(
echo/
echo+
echo=
और बदमाश गैलरी के कलाकारों के लिए +1 echo.
echo\
echo:
। अब अगर आपको यह समझाने की कोशिश की जाती है कि पवित्र काम क्यों किया जाता है, तो मैं आपको एक मुफ्त बीयर देना चाहता हूँ।
echo.
पर्याप्त कथन।
यदि आपको एक पंक्ति में इसकी आवश्यकता है, तो इसका उपयोग करें &
। उदाहरण के लिए,
echo Line 1 & echo. & echo line 3
के रूप में उत्पादन होगा:
Line 1
line 3
अब, कहते हैं कि तुम कुछ थोड़ा कट्टर चाहते हैं ...
set n=^&echo.
echo hello %n% world
आउटपुट
hello
world
फिर %n%
जब भी आप एक इको स्टेटमेंट में एक नई लाइन चाहते हैं तो बस फेंक दें। यह \n
विभिन्न भाषाओं में आपके उपयोग के अधिक करीब है ।
टूट - फूट
set n=
इसके n
बराबर चर सेट करता है:
^
अगले प्रतीक का अनुसरण करने के लिए नल:
&
एक ही लाइन पर एक और कमांड करने का मतलब है। हम एररलेवल के बारे में परवाह नहीं करते हैं (इसके ज़ोर से रोने के लिए एक गूंज कथन), इसलिए कोई &&
ज़रूरत नहीं है।
echo.
इको स्टेटमेंट जारी रखता है।
यह सब काम करता है क्योंकि आप वास्तव में चर बना सकते हैं जो कोड हैं, और अन्य कमांड के अंदर उनका उपयोग करते हैं। यह एक यहूदी बस्ती समारोह की तरह है, क्योंकि बैच वास्तव में शेल स्क्रिप्टिंग भाषाओं का सबसे उन्नत नहीं है। यह केवल इसलिए काम करता है क्योंकि बैचों का खराब उपयोग, प्राकृतिक रूप से किलों, चरों, तैरने, तार आदि के बीच में डिजाइन नहीं करना।
यदि आप चालाक हैं, तो आप अन्य चीजों के साथ काम करने के लिए इसे प्राप्त कर सकते हैं। उदाहरण के लिए, इसका उपयोग टैब को प्रतिध्वनित करने के लिए
set t=^&echo. ::there are spaces up to the double colon
echo.
क्योंकि यह पहले उस नाम से एक फ़ाइल खोजने का प्रयास करता है। अन्य विराम चिह्नों का उपयोग करें, जैसेecho,
जब किसी फ़ाइल में रीडायरेक्ट करने के लिए कुछ प्रतिध्वनित होता है, तो एकाधिक इको कमांड काम नहीं करेगा। मुझे लगता है कि शायद ">>" पुनर्निर्देशक एक अच्छा विकल्प है:
इको हैलो> अस्थायी गूंज दुनिया >> अस्थायी
(echo hello && echo world) > temp
नेथन जे। ब्रेयर द्वारा (वर्तमान) स्वीकार किए गए उत्तर कार्यों के लिए एक टिप्पणी में उल्लेख किया है।
जैसे ग्रिमट्रॉन का सुझाव है - इसे परिभाषित करने के लिए यहां एक त्वरित उदाहरण है:
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
echo hello %newline%world
पंक्ति को दोहराते हैं तो बीच में कोई रिक्त स्थान नहीं हैं।
echo "Hello %newline% world"
विफल रहता है क्योंकि यह उद्धरण के अंदर है। क्योंकि यह एक वास्तविक newline नहीं है ।
आप भी ऐसा कर सकते हैं,
(for %i in (a b "c d") do @echo %~i)
उत्पादन होगा,
a
b
c d
ध्यान दें कि जब इसे एक बैच फ़ाइल में रखा जाता है, तो '%' दोगुना हो जाएगा।
(for %%i in (a b "c d") do @echo %%~i)
अगर कोई यहाँ आता है क्योंकि वे MINGW मेकफाइल से एक खाली लाइन को प्रतिध्वनित करना चाहते हैं, तो मैंने उपयोग किया
@cmd /c echo.
बस echo.
खूंखार process_begin: CreateProcess(NULL, echo., ...) failed.
त्रुटि संदेश का कारण बनता है ।
मुझे आशा है कि यह कम से कम एक अन्य व्यक्ति को वहां से बाहर निकालने में मदद करता है :)
अगर किसी को स्ट्रिंग में शाब्दिक प्रसिद्ध \ n का उपयोग करने की आवश्यकता होती है जिसे एक चर में पारित किया जा सकता है, तो नीचे दिए गए Hello.bat स्क्रिप्ट की तरह एक कोड लिख सकते हैं:
@echo off
set input=%1
if defined input (
set answer=Hi!\nWhy did you call me a %input%?
) else (
set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)
setlocal enableDelayedExpansion
set newline=^
rem Two empty lines above are essential
echo %answer:\n=!newline!%
इस तरह से एक जगह पर मल्टीलाइन आउटपुट तैयार किया जा सकता है, यहां तक कि अन्य स्क्रिट या बाहरी फाइल में भी, और दूसरे में प्रिंट किया जा सकता है।
लाइन ब्रेक न्यूलाइन चर में आयोजित किया जाता है। अपने मूल्य प्रतिस्थापित किया जाना चाहिए के बाद गूंज लाइन तो मैं का उपयोग का विस्तार होता है setlocal enableDelayedExpansion विस्मयादिबोधक लक्षण जिन्हें निष्पादन पर चर का विस्तार कर सकें। और निष्पादन के विकल्प \ N के साथ न्यू लाइन सामग्री (कम से वाक्य रचना के लिए देखो मदद सेट )। हम निश्चित रूप से उपयोग कर सकते हैं ! उत्तर सेट करते समय but \ n अधिक सुविधाजनक है। इसे बाहर से पास किया जा सकता है ( Hello R2 \ nD2 आज़माएं ), जहाँ किसी को भी लाइन ब्रेक को पकड़ने वाले चर का नाम नहीं पता है (हाँ, नमस्ते C3! Newline! P0 उसी तरह काम करता है)।
उपर्युक्त उदाहरण का उपयोग उप-समूह या स्टैंडअलोन बैच के लिए किया जा सकता है, जैसे call:mlecho Hi\nI'm your comuter
:
:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^
echo %text:\n=!nl!%
goto:eof
कृपया ध्यान दें, अतिरिक्त बैकस्लैश स्क्रिप्ट को पार्सिंग \ n सबस्ट्रिंग से नहीं रोकेगा।
इसने मेरे लिए काम किया, कोई विलंबित विस्तार आवश्यक नहीं:
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
यह इस तरह से आउटपुट लिखता है:
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
echo asdf >myfile.txt
ठीक उसी परिणाम का उत्पादन करेगा। echo
स्ट्रिंग के अंत में एक नई लाइन जोड़ता है।
बैच में एक नई लाइन शुरू करने के लिए, आपको बस "इको [" जोड़ना है, जैसे:
echo Hi!
echo[
echo Hello!
echo[.bat
echo.
एक बुरा समाधान भी है।
echo.
। आपके स्क्रिप्ट के उपयोगकर्ताओं को उनके सिस्टम पर फ़ाइलों को हटाने के लिए सिर्फ इसलिए कि आपकी स्क्रिप्ट को एक नई पंक्ति की आवश्यकता है, मेरे लिए अच्छे डिजाइन की तरह नहीं है।
केन और जेब समाधान अच्छी तरह से काम करता है।
लेकिन नई लाइनें केवल एक एलएफ चरित्र के साथ उत्पन्न होती हैं और मुझे सीआरएलएफ वर्ण (विंडोज संस्करण) की आवश्यकता होती है।
इसके लिए, स्क्रिप्ट के अंत में, मैंने LF को CRLF में बदल दिया है।
उदाहरण:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
आप @echo
(@echo + [space] + [असुरक्षित जगह] का उपयोग कर सकते हैं )
नोट: असुरक्षित स्थान को Alt + 0160 के साथ प्राप्त किया जा सकता है
आशा है ये मदद करेगा :)
[संपादित करें] हम्म तुम सही हो, मुझे मेकफाइल में इसकी आवश्यकता थी, यह पूरी तरह से वहां काम करता है। मुझे लगता है कि मेरा जवाब बैच फ़ाइलों के लिए अनुकूलित नहीं है ... मेरा बुरा।
ECHO ist eingeschaltet (ON).
खाली लाइन नहीं मिली, मैंने cmd-प्रॉम्प्ट पर कोशिश की