Что такое знак @ в пакетном файле и для чего он нужен?

101

Тот, кто хоть немного знаком с пакетными сценариями Windows / DOS, узнает эту строку:

@echo off

В течение многих-многих дней меня радовало ощущение, что @это как echo offдолжно быть написано в начале пакета, и все.

Однако недавно я наткнулся на такую ​​строку:

@php foo bar

и еще одна такая строка :

@call \\network\folder\batch.bat

Это усилило мои подозрения, что @дело не только в echoпереключении режимов. Однако @не указан в Windows XP: справочник по командной строке AZ, который я пытаюсь использовать в качестве справочного материала, и поэтому я не уверен, как найти исчерпывающую информацию по этому поводу :

Что такое @пакетный вход, какова его терминология и для чего он нужен?

n611x007
источник
3
Нечего добавить к ответу ismail. Но на всякий случай ответ включен в указанную документацию «Справочник по командной строке AZ» в Remarksразделе, посвященном echoкоманде.
MC ND
2
@MCND Понятно, спасибо! Не знал, что это специфично для эха ... ну, думаю, я неправильно понял важность echoпакетной обработки. Вот ссылка на echo # реплики .
n611x007
2
Я слышал, что это называется «шумоподавитель», но у меня есть только анекдотические доказательства этого.
RustyTheBoyRobot
3
Возможный дубликат Что означает "@" в пакетных скриптах Windows
gunr2171

Ответы:

152

В символе - @

@ symbolСообщает процессор команды , чтобы быть менее многословным; для отображения только вывода команды без отображения ее выполнения или каких-либо подсказок, связанных с выполнением. При использовании он добавляется в начало команды, нет необходимости оставлять пробел между "@" и командой.

Когда для «echo» установлено значение «off», нет необходимости использовать «@», потому что установка для «echo» значения «off» приводит к тому, что это поведение становится автоматическим. «Эхо» обычно устанавливается на «включено» по умолчанию, когда начинается выполнение сценария. Это причина того, что "@echo off" обычно используется для выключения эха без отображения процесса его выключения.

echo verbose
@echo less verbose
pause
Солнечно
источник
3
Принял это для объяснения на месте без ... каких-либо подсказок, связанных с выполнением , и для того, чтобы говорить такие вещи, как (многословие) командного процессора и рассказывать о пространстве. :) Хорошая тестовая партия!
n611x007
7
По-видимому, это очевидно для всех, но я не знал, что это работает только при выполнении из .batфайла, то есть не работает прямо из командной строки.
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. Это верно. Я также обнаружил, что это может вызвать нежелательные побочные эффекты. Например, использование @copyследующей clip < file.txt & pauseкоманды по какой-то причине заставляет мой буфер обмена копировать текст 1 file copied.
dgo
Плохо то, что у меня нет официального документа!
Роберт
-1

Символ «at», помещенный в начало, не только скрывает команду, но также может использоваться для добавления аргументов команды, хранящихся в текстовом файле. Синтаксис - exe @ commands (если я правильно помню)

Юрий Константинов
источник
3
Нет, если вы попытаетесь выполнить что-то подобное, myExe@myCommandsне удастсяis not recognized as an internal or external command
jeb
@jeb, что будет, если поставить пробелы вокруг @символа? Я не могу заставить его работать, но я видел, как он используется в пакетных файлах ...
jdk1.0