![O que significa "(" em cmd](https://rvso.com/image/1525442/O%20que%20significa%20%22(%22%20em%20cmd.png)
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
- Faça
echo cat
, e então - 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:dog
saída adicional, porque “cachorro”fazcontém “o” e “cachorro” é o primeiro (1st) linha de entrada do findstr
comando.
Agora considere
(echo cat & echo dog) | findstr /n a
(igual ao acima, mas com parênteses adicionados), o que significa
- Faça
echo cat
,
e então
façaecho dog
, e - Pegue a saída acima e canalize-a para
findstr /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 cat
nã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 cd
entre parênteses altera o diretório de trabalho do processo CMD principal e entre set
parênteses substitui o valor da variável que foi definido fora dos parênteses.
Responder3
O ( e ) são como um begin block
e 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