¿Qué significa "(" en cmd?

¿Qué significa "(" en cmd?

Cada vez que escribo un (, es decir, unparéntesis de aperturaen elsímbolo del sistema, esto pasa:

(
More? 

Si sigo escribiendo( o cualquier otro personaje, me aparece con el mismo mensaje.esto esta parado, si entro ), es decir, elparéntesis de cierre, aunque me sale un error que dice:

) was unexpected at this time

Aparte de eso, yoNo pude encontrar lo que hace este comando.. ¿Alguna idea de lo que hace?

Respuesta1

() no es realmente un comando, sino un operador de agrupación que le permite agrupar una secuencia de comandos para usarla en el lugar donde el shell CMD normalmente espera que aparezca un solo comando.
Los comandos entre () en realidad se ejecutan en una instancia separada de CMD. Cuando escribe "(" manualmente, ingresa esa nueva instancia y espera sus comandos.

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

Tenga en cuenta que normalmente IF ELSE debería estar en la misma línea y solo puede ejecutar un único comando en la cláusula THEN y ELSE.
El uso de "()" trata todo el bloque (xxxxx) como un solo comando e incluso como si apareciera en la misma línea.

Respuesta2

Aquí ya se ha publicado mucha buena información; por ejemplo, los paréntesis están"un operador de agrupación que le permite agrupar una secuencia de comandos para usarla en el lugar donde el shell CMD normalmente espera que aparezca un solo comando"eso“son como uncomenzar bloqueybloque final"– pero se han pasado por alto algunas cosas simples:

1. Cómo no recibir el error "inesperado en este momento"

Puede hacer que suceda algo útil simplemente escribiendo comando(s) en el More? indicador:

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:\>

Puede escribir varios comandos en líneas separadas y puede moverlos )hasta el final de la última línea:

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ómo influye (y )afecta el significado de una orden?

Como otros han señalado, hay comandos como

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

donde los ()son parte de la sintaxis del propio comando ( FOR, en este caso). Si elimina los paréntesis, obtendrá un error de sintaxis. No estoy hablando de eso.

Como se dijohasta el hastío, paréntesisgrupocomandos. Considere esta línea de comando:

echo cat & echo dog | findstr /n a

Significa

  1. Hazlo echo caty luego
  2. Hacer echo dog | findstr /n a
    Dado que la palabra "perro" no contiene la letra "a", este comando no producirá ningún resultado.

En consecuencia, el resultado de lo anterior es

C:\> eco gato y eco perro | encontrarcadena /na
gato

Similarmente,

C:\> eco gato y eco perro | encontrarcadena /no
gato
1:perro

en el que obtenemos la 1:dogsalida adicional, porque "perro"hacecontiene "o", y "perro" es el primero (1st) línea de entrada al findstrcomando.

Ahora considere

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

(igual que el anterior, pero con paréntesis añadidos), lo que significa

  1. Hacer echo cat,
    y luego
    hacer echo dog, y
  2. Tome la salida de lo anterior y conéctela afindstr /n a

Entonces,

C:\> (gato eco y perro eco) | encontrarcadena /na
1:gato

C:\> (gato eco y perro eco) | encontrarcadena /no
2:perro

porque la salida del lado izquierdo (#1) de la línea de comando es

cat
dog

y “a” se encuentra en línea1de ese texto, y "o" se encuentra en la línea2. Ya no obtenemos una línea de salida que dice solo cat (sin un número de línea) porque echo catya no es un comando independiente, sino que es parte delgrupoque conforma el lado izquierdo del oleoducto.

Aquí hay un ejemplo más simple de agrupación 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

Y, por supuesto, como se muestra arriba y en las otras respuestas, puedes agregar saltos de línea dentro del grupo:

C:\> (
¿Más? eco gato
¿Más? perro eco
¿Más? ) | encontrarcadena /na
1:gato

3. ¿Los paréntesis crean una nueva instancia de CMD?

No me parece; no de ninguna manera obvia y significativa:

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

Tenga en cuenta que cdentre paréntesis cambia el directorio de trabajo del proceso CMD principal y entre setparéntesis anula el valor de la variable que se estableció fuera de paréntesis.

Respuesta3

Los ( y ) son como a begin blocky end block. Cualquier cosa que pueda poner en un archivo por lotes (.bat) se puede escribir en la línea de comando.

Por ejemplo, puedo escribir un archivo por lotes y puedo colocar un bloque de declaraciones en if:

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

Ahora, cuando ejecuto el lote sin parámetros, obtengo todos los comandos entre (y )para ejecutar. Cuando se proporciona un primer parámetro, la única salida es 'FIN'.

Ahora volvamos a la línea de comando: no conozco ningún truco o técnica para usar esto escribiendo directamente en la línea de comando. Pero sigue las mismas reglas. En la línea de comando, ingrese lo siguiente:

(echo "1" & echo "2")

La salida es:

1
2

información relacionada