Как вставить новую строку в команду 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 предложит вам "More?" каждый раз, когда вы нажимаете ввод с ^конца в конце строки, просто нажмите ввод еще раз, чтобы фактически выйти / вставить новую строку.


Слишком круто, я этого не знал.
TJ Crowder

1
Это то, что вы предлагаете, это позволяет мне вводить больше текста на новой строке. Это не сохраняет символ новой строки. То, что я хочу, это то, что между «текст» и «что угодно» является новой строкой. Как-то так: «text \ nwhwhat»
rudimenter

Я полагаю, что вы должны использовать две новые строки, чтобы сделать это, мой плохой, потому что я не понял этого в моем оригинальном сообщении (теперь отредактированном)
Darth Android

1
Следует отметить, что если в тексте есть пробелы, вам нужно будет заключить их в кавычки. Кроме того, убедитесь, что вы добавили заключительную кавычку, в противном случае символ каретки будет игнорироваться как символ перехода и обрабатываться как текст. Наконец, вам нужно будет помещать кавычки вокруг текста в каждой строке, содержащей пробелы (делайте это, даже если он не содержит пробелов, чтобы быть в безопасности), и ставить каркас после закрывающей кавычки для каждой строки, которая продолжается.
Synetech

1
Я попал сюда, пытаясь найти способ добавить новые строки в комментарии SHUTDOWN.EXEкоманды. Я закончил тем, что использовал что-то вроде этого: shutdown -s -t 900 -c "foo bar"^ > Больше? "baz"^ > Больше? "test that."Это сработало.
Synetech

4

Используйте Alt коды с цифровой клавиатурой

C:\>ver

Microsoft Windows [Version 6.3.9600]

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

C:\>

Этот символ перевода строки можно ввести как код Alt в CLI, используя цифровую клавиатуру: при включенной NumLock, удерживая нажатой клавишу ALT, введите 10 на цифровой клавиатуре, прежде чем выпускать ALT. Если вам также нужен CR, наберите их оба с помощью Alt + 13, а затем Alt + 10:♪◙

Примечание: это не будет работать в командном файле.

Пример использования:

Вы пытаетесь прочитать переменные окружения% PATH% или% CLASSPATH%, чтобы получить быстрый обзор того, что там и в каком порядке, но pathвозвращаемая стенка текста не читается. Тогда это то, что вы можете быстро набрать:

echo %path:;=◙% >con

Редактировать:

Добавлен >conобходной путь, который Брент Риттенхаус обнаружил для более новых версий cmd.exe, где оригинальный метод перестал работать.


Это не похоже на работу для меня. Я в конечном итоге e2 99 aa e2 97 99передал. Какой-то код Unicode? Хотя я вижу, что символы вводятся в командной строке. Какие-либо предложения?
Брэд

@Brad Я могу подтвердить, что он больше не работает в новом cmd.exe в Windows 10, и даже мой старый Windows 7 больше не будет так себя вести.
Амит Найду

Weird! Интересно, смогу ли я выкопать старый cmd.exe из чего-то ....
Брэд,

@Brad, я только что попробовал несколько вещей и понял, что вы можете получить это старое поведение, если переключитесь на растровые шрифты в свойствах консоли вместо шрифтов Lucida и True Type и установите Use legacy consoleфлажок. Но это выглядит очень плохо на мониторе с высоким разрешением.
Амит Найду

1
На самом деле, я думаю, что я нашел решение, которое работает для этого полностью в любом шрифте! Если вы просто отобразите строку с символами alt-10, а затем перенаправите ее на CON, она будет работать! Например: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONокружающие скобки являются необязательными. Вот более убедительный пример того, что вы можете сделать с этим (возврат каретки, который теперь работает и совершенно независимо!): I.imgur.com/qqN37PH.png
Брент Риттенхаус

1

Я не знаю, сработает ли это для вас, но поставив & echo (важно следующее пространство). между каждым оператором, который вы хотите на новой строке. Я только попробовал это с простым файлом летучей мыши

echo %1

Затем сохранил это как testNewLines.bat

Итак, линия CMD

testNewLines first line&echo Second Line&echo Third line

Результатом стало следующее возвращение

первая строка
вторая строка
третья строка


1

Расширяя ответ Амита ( /superuser//a/1132659/955256 ), я нашел способ сделать это любым шрифтом БЕЗ использования устаревшей консоли.

Все, что вам нужно сделать, это просто отобразить строку с символами alt-10, а затем перенаправить на нее, conи она будет работать!

Например, учитывая:

(эхо Обнаружена новая строка 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"

Видите, это не так сложно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.