O que significa "@" nos scripts em lote do Windows

131

Eu vi @é usado em tais contextos:

@echo off

@echo start eclipse.exe

O que @significa aqui?

Baiyan Huang
fonte

Respostas:

196

Significa não emitir o respectivo comando. Compare os dois arquivos em lotes a seguir:

@echo foo

e

echo foo

O primeiro tem apenas foocomo saída enquanto o último imprime

H:\Stuff>echo foo 
foo

(aqui, pelo menos). Como pode ser visto, o comando que é executado também é visível.

echo offdesativará isso para o arquivo em lotes completo. No entanto, a echo offchamada em si ainda seria visível. É por isso que você vê @echo offno início dos arquivos em lote. Desative o eco do comando e não faça eco do comando que o desativa.

Remover essa linha (ou comentar) geralmente é uma ferramenta de depuração útil em arquivos em lotes mais complexos, pois você pode ver o que é executado antes de uma mensagem de erro.

Joey
fonte
14

Os @desabilita eco para que um comando. Sem ele, a echo start eclipse.exelinha imprimiria a linha pretendida start eclipse.exe e a echo start eclipse.exelinha.

Os echo offdesliga o comando ecoando por padrão.

Tão @echo offsilenciosamente desativa o eco do comando, e somente a saída do autor do lote que se pretende gravar é realmente gravada.

sarnold
fonte
11

Ele herda o significado do DOS. @ :

No DOS versão 3.3 e posterior, oculta o eco de um comando em lote. Qualquer saída gerada pelo comando é ecoada.

Sem ele, você pode desativar o eco do echo offcomando usando o comando, mas esse comando será repetido primeiro.

Damien_The_Unbeliever
fonte
O link está quebrado agora
ojchase
8

Por padrão, um arquivo em lotes exibirá seu comando enquanto é executado. O objetivo deste primeiro comando, que @echo off, é desativar esta tela. O comando "eco desligado" desliga a exibição de todo o script, exceto o comando "eco desativado". O sinal "at" "@" na frente também faz com que o comando se aplique a si próprio.

Muhammad Faizan Khan
fonte
3
Não consigo ver mais ou melhores informações em sua postagem, como nas outras postagens de 5 anos.
jeb
5

Outro momento útil para incluir @ é quando você usa FORna linha de comando. Por exemplo:

FOR %F IN (*.*) DO ECHO %F

Mostra a linha anterior para cada arquivo : o prompt de comando, o ECHOcomando e o resultado do ECHOcomando. Deste jeito:

FOR %F IN (*.*) DO @ECHO %F

Apenas o resultado do ECHOcomando é mostrado.

Aacini
fonte
@PsychoData: É engraçado que você downvoted a única resposta que fornecer uma informação útil adicional para os outros 4 respostas que, por enquanto, já responderam à pergunta da mesma maneira ...
Aacini
6
Fiz voto negativo porque não era uma resposta para sua pergunta. Você nem dá uma explicação do que o @ faz. Se você tem exemplos interessantes de uso, ótimo, mas ainda não é uma resposta para a pergunta dele. Talvez você também não saiba que eu também votei na resposta com a explicação da aposta sobre o que faz e de onde vem. Eu não apenas votei sem motivo. Sua "resposta" não é uma resposta. É uma afirmação um pouco relacionada.
PsychoData
2

você pode incluir @ em um 'scriptBlock' assim:

@(
  echo don't echoed
  hostname
)
echo echoed

e especialmente não faça isso :)

for %%a in ("@") do %%~aecho %%~a
walid2mi
fonte