Windows: Як вказати командний рядок багаторядкової команди?


170

як ми поширимо команду на наступний рядок?

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

ls -l \
/usr/

тут ми використовуємо зворотний нахил для розширення команди на наступний рядок

що еквівалент для Windows?


+1 За коротку і короткої Q & A, більш розширеної розвідку при обробці каретки stackoverflow.com/questions/69068 / ...
матові Уїлкі

Відповіді:


295

Спробувавши майже кожну клавішу на клавіатурі:

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

C:\Users\Tim\Desktop>

Так що, здається, це клавіша ^.


13
Microsoft не може відповідати власним стандартам, тому це не працює в PowerShell. PowerShell, еквівалентний ^, це `So C: \ Users \ Tim> cd` >> Desktop Дозволяє вам перейти на робочий стіл Тіма \ 0 /
Рік Джафе

3
@RicJafe Чому це потрібно? PowerShell абсолютно окремий! Еквівалентним ключем для PS є `.
WhatIsHeDoing

Будь-яка ідея про те, що це в повноваженнях?
Райан

3
@RyanSeanWattrus Використовуючи той самий дуже науковий метод: `(могила l'accent)
Тімбо

57

У командному рядку Windows використовується команда ^для виходу з наступного символу в командному рядку. (Подібно до\ і використовується в рядках.) Символи, які потрібно використовувати в командному рядку, як вони є, повинні мати ^ префікс до них, отже, тому він працює для нового рядка.

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

Отже, еквівалентом вашого прикладу Linux буде ( Більше? Як підказка):

C:\> dir ^
More? C:\Windows

15
Символ '^' повинен бути останнім символом у рядку. В іншому випадку, якщо у вас є SPACE в кінці, багаторядкова команда не працює.
Дмитро Овдієнко

6

Характер карети працює, проте наступний рядок не повинен починатися з подвійних лапок. наприклад, це не спрацює:

C:\ ^
"SampleText" ..

Почніть наступний рядок без подвійних лапок (не дійсний приклад, просто для ілюстрації)


1

Якщо ви прийшли сюди, шукаючи відповідь на це питання, але не зовсім так, як мав на увазі ОП, тобто як змусити багаторядковий CMD працювати в одному рядку, я маю для вас якусь небезпечну відповідь.

Намагатися використовувати це з речами, які фактично використовують трубопроводи, як скажімо findstr, досить проблематично. Те ж саме стосується і elses. Але якщо ви просто хочете, щоб багаторядкова умовна команда виконувалася безпосередньо з 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.