O que é arroba (@) em um arquivo em lote e o que ele faz?

101

Alguém remotamente familiarizado com scripts em lote do Windows / DOS reconhecerá esta linha:

@echo off

Por muitos e muitos dias, fiquei feliz com o sentimento de que o @é como echo offdeve ser escrito no início do lote e é isso.

No entanto, já recentemente I veio em uma linha como esta:

@php foo bar

e outra linha como esta:

@call \\network\folder\batch.bat

Isso reforçou minha suspeita de que isso @envolve mais do que apenas echotroca de modo. No entanto, @não está listado no Windows XP: Referência de linha de comando de AZ que tento usar como referência e, portanto, não tenho certeza de como encontrar informações definitivas sobre isso:

Qual é o @lote de assinatura, qual é a terminologia para ele e o que ele faz?

n611x007
fonte
3
Nada a acrescentar à resposta ismail. Mas apenas para referências futuras, a resposta está incluída na documentação "Referência de linha de comando de A a Z" indicada na Remarksseção do echocomando.
MC ND
2
@MCND entendo, obrigado! Não sabia que era específico do eco ... bem, acho que não entendi a importância de echobatch. Aqui está o link para echo # comentários .
n611x007
2
Já ouvi isso ser chamado de "silenciador", mas só tenho evidências anedóticas disso.
RustyTheBoyRobot
3
Possível duplicata de O que significa "@" nos scripts de lote do Windows
gunr2171

Respostas:

152

No símbolo - @

O @ symboldiz ao processador de comandos para ser menos prolixo; para mostrar apenas a saída do comando, sem mostrar que está sendo executado ou quaisquer prompts associados à execução. Quando usado é prefixado ao início do comando, não é necessário deixar um espaço entre o "@" e o comando.

Quando "echo" está definido como "off", não é necessário usar "@" porque definir "echo" como "off" faz com que esse comportamento se torne automático. "Eco" é geralmente definido como "ativado" por padrão quando a execução de um script começa. Este é o motivo pelo qual "@echo off" é comumente usado, para desligar o eco sem exibir o ato de desligá-lo.

echo verbose
@echo less verbose
pause
Ensolarado
fonte
3
Aceito este para a explicação no local de sem ... quaisquer prompts associados à execução e para dizer coisas como (detalhamento) do processador de comandos e informações sobre o espaço. :) Bom lote de teste também!
n611x007
7
Aparentemente isso é óbvio para todos, mas eu não sabia que isso só funciona quando executado a partir de um .batarquivo, ou seja, não funciona direto da linha de comando.
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. Isso é verdade. Também descobri que isso pode causar efeitos colaterais indesejados. Por exemplo - usar @copyseguir um clip < file.txt & pausecomando por algum motivo faz com que minha área de transferência copie o texto 1 file copied.
dgo
O ruim é que não consigo o documento oficial sobre isso!
Robert
-1

O símbolo "arroba" colocado no início não apenas oculta o comando, mas também pode ser usado para anexar argumentos de comando armazenados em um arquivo de texto. A sintaxe é exe @ comandos (se bem me lembro)

Yuri Constantinoff
fonte
3
Não, se você tentar executar algo parecido myExe@myCommandscom uma falhais not recognized as an internal or external command
jeb
@jeb, O que acontece quando você coloca espaços ao redor do @símbolo? Não consigo fazer funcionar, mas já vi ser usado em arquivos em lote ...
jdk1.0