سؤال

كيف يمكنك إدراج السطر من الملف الدفعي الإخراج ؟

أريد أن أفعل شيئا مثل:

echo hello\nworld

الذي سيكون الناتج:

hello
world
هل كانت مفيدة؟

المحلول

echo hello & echo.world

هذا يعني أنك يمكن أن تحدد & echo. المستمر عن السطر \n.

نصائح أخرى

استخدام:

echo hello
echo.
echo world

تفضل يا خلق .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 البيانات الواضح.

هناك ميزة قياسية echo: في cmd/الخفافيش الملفات إلى كتابة سطر فارغ ، الذي يحاكي خط جديد في cmd-الإخراج:

@echo off
@echo line1
@echo:
@echo line2

إخراج المذكورة أعلاه cmd الملف:

line1

line2

مثل الجواب كين, ولكن مع استخدام تأخر التوسع.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

أول واحد آلية حرف تم تعيينه -متغير.
وهذا يعمل على الإقحام عند خط نهاية يحاول الهروب الحرف التالي ، ولكن إذا كان هذا هو آلية يتم تجاهل الحرف التالي هو قراءة وهرب (حتى إذا كان هذا هو أيضا آلية).
ثم كنت في حاجة الى الثالث آلية لإنهاء تعليمات الحالي ، آخر السطر الثالث سيكون إلحاق LF-متغير.
حتى الملفات الدفعية يكون خط النهايات مع CR/LF فقط لو هامة ، CR يتم إزالتها في هذه المرحلة من محلل.

الاستفادة من استخدام تأخر التوسع هو أنه لا يوجد طابع خاص في التعامل مع كل شيء.
echo Line1%LF%Line2 سوف تفشل ، كما يتوقف المحلل تحليل في واحد linefeeds.

أكثر التفسيرات في
لذلك:طويل الأوامر الانقسام عبر خطوط متعددة في ويندوز فيستا/DOS دفعة (.bat)
إذن:كيف Windows مترجم الأوامر (CMD.EXE) تحليل النصوص ؟

تحرير:تجنب echo.

هذا لا يجيب على السؤال ، السؤال كان عن واحد echo التي يمكن إخراج خطوط متعددة.

ولكن على الرغم من إجابات أخرى الذي يشير إلى استخدام echo. إلى إنشاء خط جديد وتجدر الإشارة إلى أن echo. هو أسوأ ، كما انها بطيئة جدا ويمكن كلي تفشل ، cmd.exe البحث عن ملف اسمه ECHO ومحاولة تشغيله.

للطباعة فقط سطر فارغ, يمكنك استخدام واحدة من

echo,
echo;
echo(
echo/
echo+
echo=

ولكن استخدام 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 يساوي:

^ بالقيم الخالية التالي رمز متابعة:

& يعني فعل أمر آخر على نفس الخط.نحن لا نهتم errorlevel(لها صدى البيان عن البكاء بصوت عال) ، لذلك لا && هو مطلوب.

echo. لا يزال صدى البيان.

كل هذا يعمل لأنك يمكن أن تخلق في الواقع المتغيرات التي هي رمز ، واستخدامها داخل الأوامر الأخرى.هو نوع من مثل اليهودي وظيفة منذ الدفعة ليست بالضبط الأكثر تقدما من قذيفة من لغات البرمجة.هذا يعمل فقط لأن دفعة سوء الاستخدام من المتغيرات وليس تعيين بين رجات, حرف, العوامات, سلاسل, وما إلى ذلك بطبيعة الحال.

إذا كنت ماكرة, هل يمكن الحصول على هذا العمل مع أشياء أخرى.على سبيل المثال باستخدام الأمر echo علامة تبويب

set t=^&echo.     ::there are spaces up to the double colon

عندما يردد شيئا إعادة توجيه إلى ملف متعددة صدى الأوامر لا تعمل.أعتقد ربما "> > ""معيد التوجيه" هو خيار جيد:

echo hello > temp
echo world >> temp

تماما مثل Grimtron يوحي - هنا هو مثال سريع لتحديد ذلك:

@echo off
set newline=^& echo.
echo hello %newline%world

الإخراج

C:\>test.bat
hello
world

إذا كنت بحاجة إلى وضع النتائج إلى ملف, يمكنك استخدام

(echo a & echo. & echo b) > file_containing_multiple_lines.txt

يمكنك أيضا أن تفعل مثل هذا ،

(for %i in (a b "c d") do @echo %~i)

الإخراج سيكون ،

a
b
c d

لاحظ أنه عندما يتم وضعها في ملف دفعي, '%' يجب أن تكون الضعف.

(for %%i in (a b "c d") do @echo %%~i)

إذا كان أي شخص يأتي إلى هنا لأنهم ينظرون إلى صدى سطر فارغ من مينغو جعل makefile, اعتدت

@cmd /c echo.

ببساطة باستخدام echo. أسباب اللعين process_begin: CreateProcess(NULL, echo., ...) failed. رسالة الخطأ.

آمل أن يساعد هذا على الأقل شخص واحد هناك :)

لبدء سطر جديد في دفعة ، كل ما عليك القيام به هو إضافة "صدى ["مثل:

echo Hi!
echo[
echo Hello!

هذا عملت بالنسبة لي ، لا تأخر التوسع اللازمة:

@echo off
(
echo ^<html^> 
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause

فإنه يكتب إخراج مثل هذا:

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .

كين و جيب الحلول يعمل بشكل جيد.

ولكن خطوط جديدة يتم إنشاؤها مع فقط إذا كان الطابع أريد أحرف CRLF (نسخة ويندوز).

هذا في نهاية البرنامج النصي يجب تحويلها لو أن CRLF.

على سبيل المثال:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt

إذا كان أحد يحتاج إلى استخدام الشهيرة في سلسلة حرفية التي يمكن أن تنتقل إلى متغير, يمكن كتابة الكود كما في مرحبا.الخفافيش البرنامج النصي أدناه:

@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!%

هذه الطريقة متعدد الانتاج قد أعدت من قبل في مكان واحد ، حتى في scritpt أو ملف خارجي, وطبع في آخر.

خط كسر في السطر متغير.يجب أن تكون قيمة استبداله بعد على صدى الخط هو توسيع نطاق استخدام setlocale enableDelayedExpansion لتمكين التعجب علامات توسيع المتغيرات على التنفيذ.وتنفيذ بدائل مع السطر المحتويات (ابحث عن بناء الجملة في تساعد مجموعة).ونحن يمكن بالطبع استخدام !السطر! في حين وضع الجواب ولكن هو أكثر ملاءمة.قد تكون مرت من الخارج (محاولة مرحبا R2 D2) حيث لا أحد يعرف اسم متغير عقد كسر خط (نعم ، مرحبا C3!السطر!P0 يعمل بنفس الطريقة).

المثال أعلاه قد يكون المكرر إلى روتين فرعي أو مستقل دفعة تستخدم مثل call:mlecho Hi\nI'm your comuter:

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

يرجى ملاحظة إضافية مائل لن يمنع البرنامج النصي من تحليل فرعية.

يمكنك استخدام @echo ( @echo + [الفضاء] + [insecable الفضاء] )

ملاحظة:على insecable الفضاء يمكن الحصول عليها مع Alt+0160

نأمل أن يساعد :)

[تحرير] هممم معك حق, أنا في حاجة في Makefile, أنها تعمل تماما في هناك.اعتقد ان الجواب هو لا تكييفها الملفات الدفعية...بلدي سيئة.

أنا لا يمكن أن تجعل أي أبسط من:

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat

الأكثر الطابع المحافظ طريقة لتحقيق ذلك في أنظمة لينكس ، مع -e الاسم المستعار - الذي يفسر هرب الشخصيات التي backslashed.

echo -e "hello\nworld"

وهنا الأخرى أمثلة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top