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


Ответы:


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, вывод команды автоматически отключается, и фактически записывается только вывод, который должен быть записан автором пакета.


11

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

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

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


Ссылка не работает
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команды.


@PsychoData: Забавно, что вы проголосовали против единственного ответа, который предоставляет полезную информацию в дополнение к другим 4 ответам, которые к тому времени уже ответили на вопрос таким же образом ...
Aacini

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

2

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

@(
  echo don't echoed
  hostname
)
echo echoed

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

for %%a in ("@") do %%~aecho %%~a
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.