Що таке знак (@) у пакетному файлі і що це робить?


101

Цей рядок, який добре знайомий із сценаріями пакетної роботи Windows / dos, розпізнає цей рядок:

@echo off

Протягом багатьох-багатьох днів я був задоволений почуттям, що @саме так echo offмається на увазі писатись у верхній частині партії, і все.

Однак останнім часом я натрапив на таку лінію:

@php foo bar

та ще один рядок на зразок цього:

@call \\network\folder\batch.bat

Це посилило мою підозру, що @вона має більше, ніж просто echoпереключення режиму. Однак @він не вказаний у Windows XP: Командний рядок посилання AZ, який я намагаюся використовувати в якості посилання, і тому я не знаю, як знайти остаточну інформацію щодо цього:

Що таке @знак в партії, яка термінологія для неї, і що це робить?


3
Нічого додати до відповіді на ismail. Але тільки для майбутніх посилань відповідь міститься у зазначеній документації "Довідник командного рядка AZ" під Remarksрозділом echoкоманди.
MC ND

2
@MCND Бачу, дякую! Я не знав, що це специфічний відлуння ... ну, мабуть, я неправильно зрозумів важливість echoпартії. Ось посилання на ехо # зауваження .
n611x007

2
Я чув, що це називається "шквал", але у мене є лише анекдотичні докази для цього.
RustyTheBoyRobot

Відповіді:


152

У символі - @

@ symbolПовідомляє процесор команди , щоб бути менш багатослівним; показувати тільки вихід команди, не показуючи її виконання або будь-які підказки, пов'язані з виконанням. Якщо використовується, це попередньо для початку команди, не потрібно залишати пробіл між командою "@".

Якщо "ехо" встановлено на "вимкнено", не потрібно використовувати "@", оскільки встановлення "ехо" на "вимкнено" призводить до того, що ця поведінка стає автоматичною. "Ехо" зазвичай за замовчуванням встановлюється "увімкнено", коли починається виконання сценарію. Це причина, що зазвичай використовується "@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 @ (якщо я правильно пам'ятаю)


3
Ні, якщо спробувати виконати щось подібне, myExe@myCommandsце не вдаєтьсяis not recognized as an internal or external command
jeb

@jeb, Що відбувається, коли ви ставите пробіли навколо @символу? Я не можу змусити його працювати, але я бачив, що він використовується у пакетних файлах ...
jdk1.0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.