¿Qué es el signo arroba (@) en un archivo por lotes y qué hace?

101

Alguien que esté familiarizado de forma remota con las secuencias de comandos por lotes de Windows / DOS reconocerá esta línea:

@echo off

Durante muchos, muchos días, estuve contento con el sentimiento de que así @es como echo offse debe escribir en la parte superior del lote y eso es todo.

Sin embargo, recientemente me encontré con una línea como esta:

@php foo bar

y otra línea como esta:

@call \\network\folder\batch.bat

Esto reforzó mi sospecha de que @tiene más que solo echocambiar de modo. Sin embargo, @no aparece en Windows XP: referencia de línea de comandos AZ que trato de usar como referencia y, por lo tanto, no estoy seguro de cómo encontrar información definitiva sobre esto:

¿Qué es el @lote de inicio de sesión, cuál es la terminología para él y qué hace?

n611x007
fuente
3
Nada que agregar a la respuesta de ismail. Pero solo para futuras referencias, la respuesta se incluye en la documentación indicada "Referencia de línea de comandos AZ" en la Remarkssección del echocomando.
MC ND
2
@MCND Ya veo, ¡gracias! No sabía que era específico de eco ... bueno, supongo que entendí mal la importancia de los echolotes. Aquí está el enlace para hacer eco de # comentarios .
n611x007
2
He oído que se llama "silenciamiento", pero solo tengo pruebas anecdóticas de ello.
RustyTheBoyRobot

Respuestas:

152

En el símbolo - @

los @ symbol le dice al procesador de comandos que sea menos detallado; para mostrar solo la salida del comando sin mostrar que se está ejecutando o cualquier solicitud asociada con la ejecución. Cuando se usa se antepone al comienzo del comando, no es necesario dejar un espacio entre la "@" y el comando.

Cuando "echo" se establece en "off", no es necesario utilizar "@" porque establecer "echo" en "off" hace que este comportamiento se vuelva automático. Por lo general, "Echo" se establece en "on" de forma predeterminada cuando comienza la ejecución de un script. Esta es la razón por la que se usa comúnmente "@echo off", para apagar el eco sin mostrar el acto de apagarlo.

echo verbose
@echo less verbose
pause
Soleado
fuente
3
Acepté este para la explicación en el sitio de sin ... ningún aviso asociado con la ejecución , y para decir cosas como (verbosidad de) el procesador de comandos y hablar sobre el espacio. :) ¡Buen lote de prueba también!
n611x007
7
Aparentemente, esto es obvio para todos, pero no sabía que esto solo funciona cuando se ejecuta desde un .batarchivo, es decir, no funciona directamente desde la línea de comandos.
doABarrelRoll721
1
When "echo" is set to "off" it is not necessary to use "@" because setting "echo" to "off" causes this behavior to become automatic. Esto es verdad. También he descubierto que esto puede provocar efectos secundarios no deseados. Por ejemplo, usar @copyseguir un clip < file.txt & pausecomando por alguna razón hace que mi portapapeles copie el texto 1 file copied.
dgo
¡Lo malo es que no puedo tener el documento oficial!
Robert
-1

El símbolo "arroba" colocado al principio no solo oculta el comando, sino que también se puede usar para agregar argumentos de comando almacenados en un archivo de texto. La sintaxis es exe @ comandos (si recuerdo bien)

Yuri Constantinoff
fuente
3
No, si intenta ejecutar algo como myExe@myCommandssi fallais not recognized as an internal or external command
jeb
@jeb, ¿Qué pasa cuando pones espacios alrededor del @símbolo? No puedo hacer que funcione, pero lo he visto usado en archivos por lotes ...
jdk1.0