Làm cách nào tôi có thể chèn một dòng mới trong lệnh cmd.exe?


23

Tôi đang cố gắng thực hiện một lệnh trên cmd.exe, với một ngắt dòng hoặc dòng mới như một phần của lệnh, như dưới đây:

command -option:text  
whatever

Nhưng mỗi dòng mới thực thi lệnh, thay vì tiếp tục lệnh trên dòng tiếp theo.

Vậy làm thế nào tôi có thể nhập một ký tự dòng mới hoặc tạo một lệnh nhiều dòng trong cmd.exe?



Câu trả lời:


19

Sử dụng ^nhân vật như một lối thoát:

command -option:text^

whatever

Tôi giả sử bạn đang sử dụng cmd.exe từ Windows XP hoặc tương tự. Đây không phải là DOS thực tế. Nếu bạn đang sử dụng DOS thực tế (MS-DOS, Win3.1, Win95, Win98, WinME), thì tôi không tin rằng có một lối thoát cho dòng mới. Bạn sẽ cần phải chạy một vỏ tùy chỉnh. cmd.exe sẽ nhắc bạn "Thêm?" mỗi lần bạn nhấn enter bằng một dòng ^ở cuối dòng, chỉ cần nhấn enter lần nữa để thực sự thoát / nhúng một dòng mới.


Quá tuyệt, tôi không biết điều đó.
TJ Crowder

1
Đây là những gì bạn đề xuất là cho phép tôi nhập thêm văn bản trên một dòng mới. Nó không bảo tồn dòng mới. Điều tôi muốn là giữa "văn bản" và "bất cứ điều gì" là một dòng mới. Một cái gì đó như thế này: "văn bản \ nwhthing"
rudimenter

Tôi tin rằng bạn phải sử dụng hai dòng mới để làm điều đó, điều tồi tệ của tôi là không nhận ra điều này trong bài viết gốc của tôi (hiện đã được chỉnh sửa)
Darth Android

1
Cần lưu ý rằng nếu bạn có khoảng trắng trong văn bản, bạn sẽ cần phải bọc chúng trong dấu ngoặc kép. Hơn nữa, hãy chắc chắn rằng bạn bao gồm trích dẫn kết thúc, nếu không, dấu mũ sẽ bị bỏ qua như một ký tự thoát và được xử lý như văn bản. Cuối cùng, bạn sẽ cần đặt dấu ngoặc kép quanh văn bản trên mỗi dòng chứa khoảng trắng (làm như vậy ngay cả khi nó không chứa khoảng trắng để an toàn) và đặt dấu mũ sau dấu ngoặc kép cho mỗi dòng tiếp tục.
Synetech

1
Tôi đã kết thúc ở đây bằng cách cố gắng tìm cách đưa dòng mới vào các bình luận của một SHUTDOWN.EXElệnh. Tôi đã kết thúc bằng cách sử dụng một cái gì đó như thế này: shutdown -s -t 900 -c "foo bar"^ > Khác? "baz"^ > Nhiều hơn? "test that."Nó đã làm việc.
Synetech

4

Sử dụng mã Alt với bàn phím số

C:\>ver

Microsoft Windows [Version 6.3.9600]

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

C:\>

Ký tự nguồn cấp dữ liệu đó có thể được nhập dưới dạng mã Alt trên CLI bằng cách sử dụng numpad: bật NumLock, giữ phím ALT và gõ 10 trên numpad trước khi giải phóng ALT. Nếu bạn cũng cần CR, hãy nhập cả hai bằng Alt + 13 và sau đó Alt + 10:♪◙

Lưu ý: điều này sẽ không hoạt động trong một tập tin bó.

Trường hợp sử dụng mẫu:

Bạn đang cố gắng đọc các biến môi trường% PATH% hoặc% CLASSPATH% để có cái nhìn tổng quan nhanh về những gì ở đó và theo thứ tự nào - nhưng bức tường văn bản pathtrả về là không thể đọc được. Sau đó, đây là một cái gì đó bạn có thể nhanh chóng gõ vào:

echo %path:;=◙% >con

Biên tập:

Đã thêm >concách giải quyết mà Brent Rittenhouse đã phát hiện ra cho các phiên bản mới hơn của cmd.exe, trong đó phương thức ban đầu đã ngừng hoạt động.


Điều này dường như không làm việc cho tôi. Tôi kết thúc với e2 99 aa e2 97 99thông qua. Một số loại điểm mã unicode? Tôi thấy các nhân vật đi vào dòng lệnh mặc dù. Bất kỳ đề xuất?
Brad

@Brad Tôi có thể xác nhận rằng nó dường như không còn hoạt động nữa trong cmd.exe mới trong Windows 10 và ngay cả hộp Windows 7 cũ của tôi sẽ không hoạt động theo cách này nữa.
Amit N Nikol

Kỳ dị! Tôi tự hỏi liệu tôi có thể khai thác một cmd.exe cũ từ một cái gì đó không ....
Brad

@Brad, tôi chỉ thử và vài điều và nhận ra rằng bạn có thể có hành vi cũ đó nếu bạn chuyển sang Phông chữ Raster trong thuộc tính bảng điều khiển, thay vì phông chữ Lucida và True Type và kiểm tra Use legacy consolehộp kiểm. Nhưng nó trông rất tệ trên màn hình độ phân giải cao.
Amit N Nikol

1
Trên thực tế, tôi nghĩ rằng tôi đã tìm thấy một giải pháp hoàn toàn phù hợp với phông chữ này! Nếu bạn chỉ đơn giản lặp lại dòng có ký tự alt-10 và sau đó chuyển hướng nó sang CON thì nó sẽ hoạt động! Ví dụ: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONDấu ngoặc đơn xung quanh là tùy chọn. Dưới đây là một ví dụ mạnh mẽ hơn về những gì bạn có thể làm với điều này (AND trả lại vận chuyển hiện đang hoạt động và hoàn toàn độc lập!): I.imgur.com/qqN37PH.png
Brent Rittenhouse

1

Tôi không biết nếu điều này sẽ làm việc cho bạn nhưng bằng cách đặt & echo (không gian sau là quan trọng). ở giữa mỗi câu mà bạn muốn trên một dòng mới. Tôi chỉ thử điều này với một tập tin bat đơn giản của

echo %1

Sau đó lưu nó dưới dạng testNewLines.bat

Vì vậy, dòng cmd

testNewLines first line&echo Second Line&echo Third line

Kết quả là sau đây được lặp lại

dòng đầu tiên dòng
thứ hai dòng
thứ ba


1

Mở rộng về câu trả lời của Amit ( /superuser//a/1132659/955256 ) Tôi đã tìm thấy một cách để làm điều đó trong bất kỳ phông chữ nào mà KHÔNG sử dụng bảng điều khiển cũ.

Tất cả những gì bạn cần làm chỉ đơn giản là lặp lại dòng có ký tự alt-10 và sau đó chuyển hướng nó đến convà nó sẽ hoạt động!

Ví dụ: đã cho:

(echo Bộ phát hiện dòng mới Rigghhhtt ◙ ^ <--- TẠI ĐÂY!)> CON

chỉnh sửa: Thực tế thú vị, có vẻ như bạn có thể đặt chuyển hướng ngay từ đầu như vậy:

> CON echo Dòng mới được phát hiện Rigghhhtt ◙ ^ <--- TẠI ĐÂY!

Lạ nhỉ?

Bạn sẽ nhận được một đầu ra của:


New-line detected rigghhhtt  
<-- HERE!

(Dấu ngoặc đơn xung quanh là tùy chọn.)

Dưới đây là một ví dụ mạnh mẽ hơn về những gì bạn có thể làm với lợi nhuận VÀ vận chuyển này hiện đang hoạt động và hoàn toàn độc lập!:

Tốt nhất của tất cả, điều này hoạt động nếu bạn chuyển hướng đến một tập tin!
(chỉ cần thay đổi > CONthành> desired_output_file.txt

Thưởng thức!


1

Đầu ra của ^ có thể hiểu được

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

thí dụ:

@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

; đầu ra:

t1
t2
t3
Press any key to continue . . .

0

Tôi tin rằng bạn không thể làm điều đó từ Windows cmd.exeshell. ( không phải là DOS. )


Bạn không cần một "vỏ tùy chỉnh" đầy đủ cho điều đó. Bạn sẽ chỉ cần viết một cái gì đó như thế này (ví dụ trong Python ):

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

Hoặc Ruby:

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

Đấy, nó không khó lắm đâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.