Что означает «@» в пакетных сценариях Windows

132

Я видел, @что используется в таких контекстах:

@echo off

@echo start eclipse.exe

Что @здесь значит?

Байянь Хуанг
источник

Ответы:

197

Это означает не выводить соответствующую команду. Сравните следующие два командных файла:

@echo foo

и

echo foo

Первый имеет только fooвывод, а второй печатает

H:\Stuff>echo foo 
foo

(здесь, по крайней мере). Как видно, запущенная команда тоже видна.

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

Удаление этой строки (или ее комментирование) часто бывает полезным инструментом отладки в более сложных пакетных файлах, поскольку вы можете видеть, что выполняется до сообщения об ошибке.

детеныш
источник
25

Это означает «не выводить команду на стандартный вывод».

Как ни странно,

echo off

отправим echo offна выход! Так,

@echo off

отключает это автоматическое поведение эха - и останавливает его также для всех будущих команд.

Источник: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true

Джереми МакГи
источник
14

В @отключает эхо для этой одной команды. Без этого, echo start eclipse.exeлиния будет печатать как предполагаемый start eclipse.exe и на echo start eclipse.exeлинии.

В echo offВыключает по-умолчанию команды эха.

Таким образом @echo off, вывод команды автоматически отключается, и фактически записывается только вывод, который должен быть записан автором пакета.

sarnold
источник
11

Он наследует смысл от DOS. @ :

В DOS версии 3.3 и новее скрывает эхо пакетной команды. Любой вывод, созданный командой, отображается эхом.

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

Damien_The_Unbeliever
источник
Ссылка не работает
ojchase
8

По умолчанию командный файл будет отображать свою команду при запуске. Цель этой первой команды @echo off - отключить это отображение. Команда «echo off» выключает отображение всего сценария, кроме самой команды «echo off». Знак «@» перед ним заставляет команду применяться и к самому себе.

Мухаммад Файзан Хан
источник
3
Я не вижу в вашем сообщении больше или лучше информации, как и в других сообщениях пятилетней давности.
jeb
5

Еще один полезный момент для включения @ - это когда вы используете его FORв командной строке. Например:

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

Предыдущая строка показывает для каждого файла : командную строку, ECHOкоманду и результат ECHOкоманды. Сюда:

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

Отображается только результат ECHOкоманды.

Aacini
источник
@PsychoData: Забавно, что вы проголосовали против единственного ответа, который предоставляет полезную информацию в дополнение к другим 4 ответам, которые к тому времени уже ответили на вопрос таким же образом ...
Aacini
6
Я проголосовал против, потому что это не был ответ на его вопрос. Вы даже не объясняете, что делает @. Если у вас есть классные примеры использования - отлично, но это все еще не ответ на его вопрос. Возможно, вы также не знаете, что я также поддержал ответ с объяснением пари, что он делает и откуда он берется. Я не просто голосовал против без причины. Ваш «ответ» - это не ответ. Это несколько похожее утверждение.
PsychoData
2

вы можете включить @ в 'scriptBlock' следующим образом:

@(
  echo don't echoed
  hostname
)
echo echoed

и особо не делай этого :)

for %%a in ("@") do %%~aecho %%~a
walid2mi
источник