Muita informação boa já foi postada aqui -
por exemplo, parênteses são “um operador de agrupamento
que permite agrupar uma sequência de comandos juntos
para usá-lo no lugar onde o shell CMD normalmente espera um único comando
para aparecer ” que “ são como um bloco inicial e bloco final ” -
mas algumas coisas simples foram negligenciadas:
1. Como não obter o erro “inesperado neste momento”
Você pode conseguir algo útil para acontecer
simplesmente digitando command (s) no prompt 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:\>
Você pode digitar vários comandos em linhas separadas e pode mover o )
até o final da última linha:
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. Como (
e )
afetam o significado de um comando?
Como outros apontaram, existem comandos como
C:\> for %f in (\Windows\*.dll) do @echo %f
em que (
… )
fazem parte da sintaxe do próprio comando
( FOR
, neste caso).
Se você remover os parênteses, você receberá um erro de sintaxe.
Eu não estou falando sobre isso.
Como declarado ad nauseam , parênteses grupo comandos.
Considere esta linha de comando:
echo cat & echo dog | findstr /n a
Isso significa
- Do
echo cat
,
e então
- Do
echo dog | findstr /n a
Como a palavra “cão” não contém a letra “a”,
este comando não produzirá saída.
Assim, a saída para o acima é
C:\> echo cat & echo dog | findstr /n a
cat
Da mesma forma,
C:\> echo cat & echo dog | findstr /n o
cat
1:dog
em que obtemos a saída 1:dog
adicional,
porque "cachorro" faz contém "o",
e "dog" é a primeira linha de entrada ( 1 st) para o comando findstr
.
Agora considere
(echo cat & echo dog) | findstr /n a
(igual ao acima, mas com parênteses adicionados), o que significa
- Do
echo cat
,
e depois,
do echo dog
e
- Pegue a saída acima e canalize-a para
findstr /n a
Então,
C:\> (echo cat & echo dog) | findstr /n a
1:cat
C:\> (echo cat & echo dog) | findstr /n o
2:dog
porque a saída do lado esquerdo (# 1) da linha de comando é
cat
dog
e "a" é encontrado na linha 1 desse texto,
e “o” é encontrado na linha 2 .
Nós não temos mais uma linha de saída que diz apenas cat
(sem um número de linha)
porque o echo cat
não é mais um comando independente
mas faz parte do grupo que compõe o lado esquerdo do pipeline.
Veja um exemplo mais simples de agrupamento de comandos:
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
E, claro, como mostrado acima e nas outras respostas,
você pode adicionar quebras de linha dentro do grupo:
C:\> (
More? echo cat
More? echo dog
More? ) | findstr /n a
1:cat
3. Os parênteses criam uma nova instância do CMD?
Eu não penso assim; não de maneira óbvia e significativa:
C:\> (cd windows)
C:\Windows> set a=aardvark
C:\Windows> (set a=bat)
C:\Windows> echo %a%
bat
Observe que o cd
entre parênteses
altera o diretório de trabalho do processo principal do CMD,
e o set
entre parênteses
substitui o valor da variável que foi definido fora dos parênteses.