Windows: Как указать многострочную команду в командной строке? - PullRequest
137 голосов
/ 03 марта 2009

как расширить команду до следующей строки?

в основном, что альтернатива Windows для Linux

ls -l \
/usr/

здесь мы используем обратную косую черту для расширения команды в следующей строке

Что эквивалентно для Windows?

Ответы [ 4 ]

233 голосов
/ 03 марта 2009

После нажатия почти каждой клавиши на моей клавиатуре:

C:\Users\Tim>cd ^
Mehr? Desktop

C:\Users\Tim\Desktop>

Так что, похоже, это клавиша ^.

50 голосов
/ 03 марта 2009

В командной строке Windows ^ используется для экранирования следующего символа в командной строке. (Например, \ используется в строках.) Символам, которые необходимо использовать в командной строке, так как они должны иметь префикс ^ к ним, поэтому он работает для новой строки.

Для справки: символы, которые необходимо экранировать (если они указаны в качестве аргументов команды, а не в кавычках): &|()

Таким образом, эквивалент вашего примера Linux будет ( More? является подсказкой):

C:\> dir ^
More? C:\Windows
3 голосов
/ 14 марта 2018

Символ каретки работает, однако следующая строка не должна начинаться с двойных кавычек. например это не будет работать:

C:\ ^
"SampleText" ..

Начало следующей строки без двойных кавычек (недопустимый пример, просто для иллюстрации)

0 голосов
/ 15 февраля 2019

Если вы пришли сюда в поисках ответа на этот вопрос, но не точно , как имел в виду OP, то есть, как заставить многострочную CMD работать в единственной строке У меня есть опасный ответ для тебя.

Попытка использовать это с вещами, которые фактически используют трубопровод, как, скажем, findstr, довольно проблематична. То же самое относится и к else с. Но если вы просто хотите, чтобы многострочная условная команда выполнялась непосредственно из CMD, а не через пакетный файл, это должно хорошо работать.

Допустим, у вас есть что-то вроде этого в пакете, который вы хотите запустить непосредственно в командной строке:

@echo off
for /r %%T IN (*.*) DO (
    if /i "%%~xT"==".sln" (
        echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
        echo Dumping SLN file contents
        type "%%~T"
    )
)

Теперь вы можете использовать символ продолжения строки (^) и вручную напечатать его вот так, но, предупреждающе, это утомительно, и если вы все испортите, вы можете научиться радости от того, что все это снова напечатаете. *

Ну, это не будет работать только с ^ благодаря механизмам экранирования внутри скобок пожимание плечами По крайней мере, не так, как написано. На самом деле вам нужно будет удвоить карат, например, так:

@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))

Вместо этого вы можете быть грязным подлым сценаристом с неправильной стороны дорожек, для которых не нужно никаких каратов, заменяя их на один канал (|) за продолжение цикла / выражения:

@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...