ฉันจะแทรกบรรทัดใหม่ในคำสั่ง cmd.exe ได้อย่างไร


23

ฉันพยายามรันคำสั่งcmd.exeโดยมีตัวแบ่งบรรทัดหรือบรรทัดใหม่เป็นส่วนหนึ่งของคำสั่งดังต่อไปนี้:

command -option:text  
whatever

แต่ทุก ๆ บรรทัดใหม่จะประมวลผลคำสั่งแทนที่จะดำเนินการตามคำสั่งในบรรทัดถัดไป

ดังนั้นฉันจะป้อนอักขระบรรทัดใหม่หรือสร้างคำสั่งหลายบรรทัดใน cmd.exe ได้อย่างไร



คำตอบ:


19

ใช้^ตัวละครเป็นตัวหนี:

command -option:text^

whatever

ฉันสมมติว่าคุณกำลังใช้ cmd.exe จาก Windows XP หรือที่คล้ายกัน นี่ไม่ใช่ DOS จริง หากคุณกำลังใช้ DOS จริง (MS-DOS, Win3.1, Win95, Win98, WinME) ดังนั้นฉันไม่เชื่อว่ามีการหลบหนีสำหรับบรรทัดใหม่ คุณจะต้องเรียกใช้เชลล์ที่กำหนดเอง cmd.exe จะถามคุณเกี่ยวกับ "เพิ่มเติม" ทุกครั้งที่คุณกด Enter ด้วย a ^ที่ท้ายบรรทัดเพียงกด enter อีกครั้งเพื่อหลบหนี / ฝังบรรทัดใหม่


เจ๋งเกินไปฉันไม่รู้
TJ Crowder

1
นี่คือสิ่งที่คุณแนะนำคืออนุญาตให้ฉันป้อนข้อความเพิ่มเติมในบรรทัดใหม่ มันไม่รักษาบรรทัดใหม่ สิ่งที่ฉันต้องการคือระหว่าง "ข้อความ" และ "อะไรก็ตาม" คือการขึ้นบรรทัดใหม่ บางสิ่งเช่นนี้: "ข้อความ \ n อะไรก็ตาม"
rudimenter

ฉันเชื่อว่าคุณต้องใช้สองบรรทัดใหม่ในการทำเช่นนั้นฉันไม่ดีที่ไม่รู้ตัวในโพสต์ดั้งเดิมของฉัน (ตอนนี้แก้ไข)
Darth Android

1
ควรสังเกตว่าถ้าคุณมีช่องว่างในข้อความคุณจะต้องล้อมด้วยเครื่องหมายคำพูด นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณใส่เครื่องหมายอัญประกาศมิฉะนั้นเครื่องหมายคาเร็ตจะถูกละเว้นเป็นอักขระเลี่ยงและถือว่าเป็นข้อความ สุดท้ายคุณจะต้องใส่เครื่องหมายคำพูดล้อมรอบข้อความในแต่ละบรรทัดที่มีช่องว่าง (ทำแม้ว่าจะไม่มีช่องว่างที่จะปลอดภัย) และวางเครื่องหมายรูปหมวกหลังคำพูดปิดสำหรับแต่ละบรรทัดที่ดำเนินการต่อ
Synetech

1
ฉันลงเอยที่นี่โดยพยายามหาวิธีใส่บรรทัดใหม่ในความคิดเห็นของSHUTDOWN.EXEคำสั่ง ฉันลงเอยด้วยการใช้สิ่งนี้: shutdown -s -t 900 -c "foo bar"^ > มากกว่านี้? "baz"^ > เพิ่มเติม "test that."มันได้ผล
Synetech

4

ใช้รหัส Alt กับ numpad

C:\>ver

Microsoft Windows [Version 6.3.9600]

C:\>echo Line1◙Line2 >con
Line1
Line2

C:\>

อักขระป้อนบรรทัดนั้นสามารถป้อนเป็นรหัส Altบน CLI โดยใช้ numpad: โดยเปิด NumLock กด ALT ค้างไว้แล้วพิมพ์ 10 บน numpad ก่อนปล่อย ALT หากคุณต้องการ CR เช่นกันให้พิมพ์ทั้งคู่ด้วย Alt + 13 และ Alt + 10:♪◙

หมายเหตุ: สิ่งนี้จะไม่ทำงานในแบตช์ไฟล์

ตัวอย่างการใช้งานกรณี:

คุณกำลังพยายามอ่านตัวแปรสภาพแวดล้อม% PATH% หรือ% CLASSPATH% เพื่อดูภาพรวมอย่างรวดเร็วว่ามีอะไรบ้างและอยู่ในลำดับใด - แต่ส่วนของข้อความที่pathส่งคืนนั้นไม่สามารถอ่านได้ นี่คือสิ่งที่คุณสามารถพิมพ์ได้อย่างรวดเร็ว:

echo %path:;=◙% >con

แก้ไข:

เพิ่ม>conวิธีแก้ปัญหาที่ Brent Rittenhouse ค้นพบสำหรับ cmd.exe รุ่นใหม่ซึ่งวิธีการเดิมหยุดทำงาน


ดูเหมือนจะไม่เหมาะกับฉัน ฉันจบลงด้วยการe2 99 aa e2 97 99ส่งผ่านจุดรหัส unicode บางอย่าง? ฉันเห็นตัวละครเข้าไปในบรรทัดคำสั่งว่า ข้อเสนอแนะใด ๆ
แบรด

@Brad ฉันสามารถยืนยันได้ว่ามันไม่ทำงานอีกต่อไปใน cmd.exe ใหม่ใน Windows 10 และแม้กระทั่งกล่อง Windows 7 เก่าของฉันก็จะไม่ทำงานแบบนี้อีกต่อไป
Amit Naidu

แปลก! ฉันสงสัยว่าฉันสามารถขุดขึ้น cmd.exe เก่าจากบางสิ่งบางอย่าง ....
แบรด

@Brad ฉันเพิ่งลองและบางสิ่งและรู้ว่าคุณสามารถใช้พฤติกรรมเก่านั้นได้หากคุณเปลี่ยนเป็นแบบอักษร Raster ในคุณสมบัติคอนโซลแทนที่จะเป็นแบบอักษร Lucida และ True Type และUse legacy consoleทำเครื่องหมายในช่องทำเครื่องหมาย แต่มันดูแย่มาก ๆ บนหน้าจอความละเอียดสูง
Amit Naidu

1
ที่จริงฉันคิดว่าฉันพบวิธีแก้ปัญหาที่ใช้งานได้ดีกับตัวอักษรใด ๆ ! หากคุณเพียงแค่สะท้อนเส้นที่มีอักขระ alt-10 แล้วเปลี่ยนเส้นทางไปยัง CON มันจะทำงาน! ตัวอย่าง: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONวงเล็บล้อมรอบเป็นทางเลือก นี่คือตัวอย่างที่มีประสิทธิภาพมากขึ้นของสิ่งที่คุณสามารถทำได้ด้วย (และการรับคืนของสายการบินซึ่งตอนนี้ทำงานได้อย่างอิสระ!): i.imgur.com/qqN37PH.png
Brent Rittenhouse

1

ฉันไม่ทราบว่าสิ่งนี้จะได้ผลสำหรับคุณหรือไม่โดยการ & & echo (พื้นที่ต่อไปนี้สำคัญ) ในระหว่างแต่ละคำสั่งที่คุณต้องการในบรรทัดใหม่ ฉันลองมันด้วยไฟล์ bat แบบง่าย ๆ เท่านั้น

echo %1

จากนั้นบันทึกไว้ในชื่อ testNewLines.bat

ดังนั้นแล้วบรรทัด cmd

testNewLines first line&echo Second Line&echo Third line

ส่งผลให้เกิดการสะท้อนกลับดังต่อไปนี้

บรรทัดแรกบรรทัด
ที่สองบรรทัด
ที่สาม


1

ขยายคำตอบของ Amit ( /superuser//a/1132659/955256 ) ฉันพบวิธีที่จะทำได้ในแบบอักษรใด ๆ โดยไม่ต้องใช้คอนโซลแบบดั้งเดิม

สิ่งที่คุณต้องทำคือเพียงแค่สะท้อนเส้นที่มีอักขระ alt-10 แล้วเปลี่ยนเส้นทางไปconและมันจะทำงาน!

ตัวอย่างเช่นกำหนด:

(echo ตรวจพบบรรทัดใหม่ rigghhhtt ◙ ^ <--- ที่นี่!)> CON

แก้ไข: สนุกจริง ๆ แล้วดูเหมือนว่าคุณสามารถเปลี่ยนเส้นทางได้ที่จุดเริ่มต้นดังนี้:

> CON echo ตรวจพบบรรทัดใหม่ rigghhhtt ◙ ^ <--- ที่นี่!

แปลกใช่มั้ย

คุณจะได้ผลลัพธ์จาก:


New-line detected rigghhhtt  
<-- HERE!

(เครื่องหมายวงเล็บโดยรอบเป็นตัวเลือก)

นี่คือตัวอย่างที่มีประสิทธิภาพมากขึ้นของสิ่งที่คุณสามารถทำได้กับการรับคืนและการขนส่งซึ่งตอนนี้ใช้งานได้และเป็นอิสระอย่างสมบูรณ์:

ดีที่สุดของทั้งหมดนี้ใช้งานได้หากคุณเปลี่ยนเส้นทางไปยังไฟล์เช่นกัน!
(เปลี่ยน> CONเป็น> desired_output_file.txt

สนุก!


1

เอาต์พุตของ ^ สามารถบันทึกได้

set br= ^
<</br (newline)>>
<</br>>

ตัวอย่าง:

@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"


rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^



set "t=t1!br!t2!br!t3"

for /f "tokens=* delims=" %%q in ("!t!") do (
    echo %%q
)


:scIn
rem endlocal
pause
rem exit /b

; เอาท์พุท:

t1
t2
t3
Press any key to continue . . .

0

ฉันเชื่อว่าคุณไม่สามารถทำได้จากcmd.exeเชลล์ของWindows ( มันเป็นไม่ได้ DOS. )


คุณไม่ต้องการ "เชลล์แบบกำหนดเอง" เต็มรูปแบบสำหรับสิ่งนั้น คุณจะต้องเขียนสิ่งนี้ (ตัวอย่างในPython ):

import subprocess
subprocess.call(["C:\\bin\\sometool.exe", "test\nwith\nnewlines"])

หรือทับทิม:

Kernel::exec "C:\\bin\\sometool.exe", "test\nwith\nnewlines"

เห็นไหมว่ามันไม่ยาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.