Que signifie «@» dans les scripts batch Windows

132

J'ai vu @est utilisé dans de tels contextes:

@echo off

@echo start eclipse.exe

Que @signifie ici?

Baiyan Huang
la source

Réponses:

197

Cela signifie ne pas sortir la commande correspondante. Comparez les deux fichiers batch suivants:

@echo foo

et

echo foo

Le premier n'a que foocomme sortie tandis que le second imprime

H:\Stuff>echo foo 
foo

(ici, au moins). Comme on peut le voir, la commande exécutée est également visible.

echo offdésactivera cette option pour le fichier de commandes complet. Cependant, l' echo offappel lui-même serait toujours visible. C'est pourquoi vous voyez @echo offau début des fichiers batch. Désactivez l'écho de commande et ne faites pas écho à la commande en l'éteignant.

La suppression de cette ligne (ou la mise en commentaire) est souvent un outil de débogage utile dans les fichiers de commandes plus complexes, car vous pouvez voir ce qui est exécuté avant un message d'erreur.

Joey
la source
14

Le @désactive l'écho pour cette commande. Sans cela, la echo start eclipse.exeligne imprimerait à la fois la ligne prévue start eclipse.exe et la echo start eclipse.exeligne.

Le echo offdésactive l'écho de la commande par défaut.

@echo offDésactive donc silencieusement l'écho des commandes et seule la sortie de l'auteur du lot destiné à être écrit est réellement écrite.

sarnold
la source
11

Il hérite de la signification de DOS. @ :

Dans les versions DOS 3.3 et ultérieures, masque l'écho d'une commande batch. Toute sortie générée par la commande est renvoyée.

Sans cela, vous pourriez désactiver l'écho de commande à l'aide de la echo offcommande, mais cette commande serait renvoyée en premier.

Damien_The_Unbeliever
la source
Le lien est maintenant rompu
ojchase
8

Par défaut, un fichier de commandes affichera sa commande lors de son exécution. Le but de cette première commande que @echo off est de désactiver cet affichage. La commande "echo off" désactive l'affichage pour tout le script, à l'exception de la commande "echo off" elle-même. Le signe "at" "@" devant fait que la commande s'applique également à elle-même.

Muhammad Faizan Khan
la source
3
Je ne peux pas voir plus d'informations ou de meilleures informations dans votre message, comme dans les autres messages vieux de 5 ans.
jeb
5

Un autre moment utile pour inclure @ est lorsque vous utilisez FORdans la ligne de commande. Par exemple:

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

La ligne précédente affiche pour chaque fichier : l'invite de commande, la ECHOcommande et le résultat de la ECHOcommande. Par ici:

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

Seul le résultat de la ECHOcommande est affiché.

Aacini
la source
@PsychoData: C'est drôle que vous ayez voté à la baisse la seule réponse qui fournit une information utile supplémentaire aux 4 autres réponses qui, d'ici là, répondaient déjà à la question de la même manière ...
Aacini
6
J'ai voté contre parce que ce n'était pas une réponse à sa question. Vous ne donnez même pas une explication de ce que fait le @. Si vous avez des exemples d'utilisation sympas, tant mieux, mais ce n'est toujours pas une réponse à sa question. Vous ne savez peut-être pas que j'ai également voté pour la réponse avec l'explication du pari de ce qu'elle fait et d'où elle vient. Je n'ai pas simplement voté sans raison. Votre «réponse» n'est pas une réponse. C'est une déclaration quelque peu liée.
PsychoData
2

vous pouvez inclure @ dans un 'scriptBlock' comme ceci:

@(
  echo don't echoed
  hostname
)
echo echoed

et surtout ne fais pas ça :)

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