Здесь уже размещено много полезной информации - например, круглые скобки - это «оператор группировки, который позволяет группировать последовательность команд вместе, чтобы использовать ее там, где оболочка 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
Это значит
- Сделать
echo cat
, а потом
- Do
echo dog | findstr /n a
Поскольку слово «собака» не содержит буквы «а», эта команда не будет выводить.
Соответственно, выход для вышеупомянутого
C:\> echo cat & echo dog | findstr /n a
cat
Так же,
C:\> echo cat & echo dog | findstr /n o
cat
1:dog
в которой мы получаем дополнительный 1:dog
выход собаки, потому что «собака» действительно содержит «о» и «собака» является первым (1 - й) строка ввода в команде findstr
Теперь рассмотрим
(echo cat & echo dog) | findstr /n a
(то же, что и выше, но с добавленными скобками), что означает
- Сделать
echo cat
,
а потом
сделать echo dog
, и
- Возьмите вывод из вышеперечисленного и направьте его в
findstr /n a
Так,
C:\> (echo cat & echo dog) | findstr /n a
1:cat
C:\> (echo cat & echo dog) | findstr /n o
2:dog
потому что вывод с левой стороны (# 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
И, конечно, как показано выше и в других ответах, вы можете добавить разрывы строк в группе:
C:\> (
More? echo cat
More? echo dog
More? ) | findstr /n a
1:cat
3. Создают ли скобки новый экземпляр CMD?
Я так не думаю; не каким-либо очевидным, значимым способом:
C:\> (cd windows)
C:\Windows> set a=aardvark
C:\Windows> (set a=bat)
C:\Windows> echo %a%
bat
Обратите внимание, что cd
в скобках изменяет рабочий каталог основного процесса CMD, а set
в скобках переопределяет значение переменной, которое было установлено вне скобок.