Что означает "(" в cmd

Что означает "(" в cmd

Всякий раз, когда я печатаю (, т.е.открывающая скобкавКомандная строка, Бывает:

(
More? 

Если я продолжу печатать( или любой другой персонаж, он выдает мне то же самое сообщение.Это остановлено, если я ввожу ), т.е.закрывающая скобка, хотя я получаю сообщение об ошибке:

) was unexpected at this time

Кроме этого, яне удалось найти, что делает эта команда. Есть идеи, что он делает?

решение1

() на самом деле не команда, а оператор группировки, который позволяет вам группировать последовательность команд вместе, чтобы использовать ее там, где оболочка CMD обычно ожидает появления одной команды.
Команды между () на самом деле выполняются в отдельном экземпляре CMD. Когда вы вводите "(" вручную, вы вводите этот новый экземпляр, и он ждет ваших команд.

if not exist c:\myfile (
  echo File doesn't exist
) else (
  echo File DOES exists
  del c:\myfile
)

Обратите внимание, что обычно IF ELSE должно быть на той же строке, и вы можете выполнить только одну команду в предложениях THEN и ELSE.
Использование "()" обрабатывает весь блок (xxxxx) как одну команду и даже так, как если бы он находился на той же строке.

решение2

Здесь уже было размещено много полезной информации — например, скобки«Оператор группировки, позволяющий группировать последовательность команд для использования ее там, где оболочка CMD обычно ожидает появления одной команды»что«похожи наначать блокиконечный блок— но некоторые простые вещи были упущены из виду:

1. Как не получить ошибку «неожиданно в данный момент»

Вы можете получить что-то полезное, просто введя команду(ы) в More? командной строке:

C:\> (
More? date /t
More? )
Tue 04/11/2017

C:\> (
More? dir \Windows\win.ini
More? )
 Volume in drive C is OS
 Volume Serial Number is ▒▒▒▒-▒▒▒▒

 Directory of C:\Windows

08/13/2014  12:26 PM               435 win.ini
               1 File(s)            435 bytes
               0 Dir(s)  ▒▒▒,▒▒▒,▒▒▒,▒▒▒ bytes free

C:\>

Вы можете ввести несколько команд в отдельных строках и переместить их )в конец последней строки:

C:\> (
More? date /t
More? time /t
More? )
Tue 04/11/2017
06:18 PM

C:\> (
More? date /t
More? time /t)
Tue 04/11/2017
06:18 PM

C:\>

2. Как (влияют )на значение команды?

Как уже отмечалось, существуют такие команды, как

C:\> for %f in (\Windows\*.dll) do @echo %f

где ()являются частью синтаксиса самой команды ( FORв данном случае). Если убрать скобки, то получится синтаксическая ошибка. Я не об этом.

Как указанодо тошноты, круглые скобкигруппакоманды. Рассмотрим эту командную строку:

echo cat & echo dog | findstr /n a

Это значит

  1. Сделай echo cat, а потом
  2. Поскольку echo dog | findstr /n a
    слово «dog» не содержит буквы «a», эта команда не выведет ничего.

Соответственно, вывод для вышеизложенного следующий:

C:\> echo cat & echo dog | findstr /na
кот

Сходным образом,

C:\> echo cat & echo dog | findstr /no
кот
1:собака

в котором мы получаем дополнительный 1:dogвывод, потому что «собака»делаетсодержат «о», а «собака» — первая (1st) строка ввода команды findstr.

Теперь рассмотрим

(echo cat & echo dog) | findstr /n a

(то же самое, что и выше, но с добавленными скобками), что означает

  1. Делай echo cat,
    а затем
    делай echo dog, и
  2. Возьмите вывод из вышеприведенного и направьте его вfindstr /n a

Так,

C:\> (echo cat & echo dog) | findstr /na
1:кот

C:\> (echo cat & echo dog) | findstr /no
2:собака

потому что вывод с левой стороны (#1) командной строки — это

cat
dog

и «а» находится в строке1этого текста, и «о» находится в строке2. Мы больше не получаем строку вывода, которая говорит только cat (без номера строки), потому что это echo catбольше не отдельная команда, а частьгруппакоторый составляет левую сторону трубопровода.

Вот более простой пример группировки команд:

C:\Temp> echo cat & echo dog > animals
cat

C:\Temp> type animals
dog

C:\Temp> (echo cat & echo dog) > animals

C:\Temp> type animals
cat
dog

И, конечно же, как показано выше и в других ответах, вы можете добавлять переносы строк внутри группы:

С:\> (
Больше? эхо кот
Больше? эхо собака
Еще? ) | findstr /na
1:кот

3. Создают ли скобки новый экземпляр CMD?

Я так не думаю; не в какой-либо очевидной и значимой форме:

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

Обратите внимание, что cdв скобках изменяет рабочий каталог основного процесса CMD, а setв скобках переопределяет значение переменной, установленное за пределами скобок.

решение3

( и ) похожи на begin blockи end block. Все, что можно поместить в пакетный файл (.bat), можно ввести в командной строке.

Например, я могу написать пакетный файл, который может поместить блок операторов в if:

if "%1"=="" (
  echo Multiple
  echo Lines when no parameter
)
echo END

Теперь, когда я запускаю пакет без параметров, я получаю все команды между (и )для запуска. Когда указан первый параметр, единственным выходом является 'END'.

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

(echo "1" & echo "2")

Вывод:

1
2

Связанный контент