O que significa "(" em cmd

O que significa "(" em cmd

Sempre que digito an (, ou seja, anabrindo parêntesesnoprompt de comando, isto acontece:

(
More? 

Se eu continuar digitando( ou qualquer outro personagem, ele me mostra a mesma mensagem.Isso está parado, se eu entrar ), ou seja, ofechando parênteses, embora eu receba um erro, que diz:

) was unexpected at this time

Fora isso, eunão consegui encontrar o que este comando faz. Alguma idéia do que isso faz?

Responder1

() não é realmente um comando, mas um operador de agrupamento que permite agrupar uma sequência de comandos para usá-la no local onde o shell CMD normalmente espera que um único comando apareça.
Os comandos entre () são na verdade executados em uma instância separada do CMD. Ao digitar "(" manualmente você entra nessa nova instância e ela aguarda seus comandos.

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

Observe que normalmente IF ELSE deve estar na mesma linha e você só pode executar um único comando na cláusula THEN e ELSE.
Usar "()" trata todo o bloco (xxxxx) como um único comando e até como se aparecesse na mesma linha.

Responder2

Muitas informações boas já foram postadas aqui - por exemplo, os parênteses são“um operador de agrupamento que permite agrupar uma sequência de comandos para usá-la no local onde o shell CMD normalmente espera que um único comando apareça”que“são como umbloco inicialebloco final- mas algumas coisas simples foram esquecidas:

1. Como não receber o erro “inesperado neste momento”

Você pode fazer com que algo útil aconteça simplesmente digitando comando(s) no More? prompt:

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 mover )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 afeta (e )afeta o significado de uma ordem?

Como outros apontaram, existem comandos como

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

onde ()fazem parte da sintaxe do próprio comando ( FOR, neste caso). Se você remover os parênteses, receberá um erro de sintaxe. Eu não estou falando sobre isso.

Como declaradoaté enjoar, parêntesesgrupocomandos. Considere esta linha de comando:

echo cat & echo dog | findstr /n a

Isso significa

  1. Faça echo cat, e então
  2. Do echo dog | findstr /n a
    Como a palavra “cachorro” não contém a letra “a”, este comando não produzirá saída.

Assim, a saída para o acima é

C:\> eco gato e eco cachorro | encontrarstr /na
gato

De forma similar,

C:\> eco gato e eco cachorro | encontrarstr /não
gato
1:cachorro

em que obtemos a 1:dogsaída adicional, porque “cachorro”fazcontém “o” e “cachorro” é o primeiro (1st) linha de entrada do findstrcomando.

Agora considere

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

(igual ao acima, mas com parênteses adicionados), o que significa

  1. Faça echo cat,
    e então
    faça echo dog, e
  2. Pegue a saída acima e canalize-a parafindstr /n a

Então,

C:\> (eco gato e eco cachorro) | encontrarstr /na
1:gato

C:\> (eco gato e eco cachorro) | encontrarstr /não
2:cachorro

porque a saída do lado esquerdo (#1) da linha de comando é

cat
dog

e “a” é encontrado na linha1desse texto, e “o” é encontrado na linha2. Não obtemos mais uma linha de saída que diz apenas cat (sem um número de linha) porque echo catnão é mais um comando independente, mas faz parte dogrupoque constitui o lado esquerdo do pipeline.

Aqui está 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:\> (
Mais? eco gato
Mais? cachorro eco
Mais? ) | encontrarstr /na
1:gato

3. Os parênteses criam uma nova instância do CMD?

Eu não acho; não de uma forma óbvia e significativa:

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

Observe que cdentre parênteses altera o diretório de trabalho do processo CMD principal e entre setparênteses substitui o valor da variável que foi definido fora dos parênteses.

Responder3

O ( e ) são como um begin blocke end block. Qualquer coisa que você possa colocar em um arquivo em lote (.bat) pode ser digitado na linha de comando.

Por exemplo, posso escrever um arquivo em lote e colocar um bloco de instruções em if:

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

Agora, quando executo o lote sem parâmetros, recebo todos os comandos entre (e )para executar. Quando um primeiro parâmetro é fornecido, a única saída é 'END'.

Agora, de volta à linha de comando: não conheço nenhum truque ou técnica para realmente usar isso digitando diretamente na linha de comando. Mas, no entanto, segue as mesmas regras. Na linha de comando, digite o seguinte:

(echo "1" & echo "2")

A saída é:

1
2

informação relacionada