COMMAND.COM

Поделись знанием:
Перейти к: навигация, поиск
COMMAND.COM
Тип

Командный интерпретатор

Разработчик

Seattle Computer Products, Microsoft, IBM, Novell и др.

Операционная система

DOS (MS-DOS, DR-DOS, FreeDOS и т. д.), OS/2, Windows 9x и др.

Языки интерфейса

Мультиязычный

К:Википедия:Статьи без изображений (тип: не указан)

COMMAND.COM — интерпретатор командной строки в операционных системах DOS, OS/2, семейства Windows 9x и ряда других. Загружается при старте системы или VDM (если не указан другой интерпретатор с помощью директивы SHELL= в файле CONFIG.SYS) и выполняет команды из файла AUTOEXEC.BAT.[1]

В операционных системах семейства Windows NT (начиная с Windows NT 3.1 и заканчивая Windows 8 / Windows Server 2012) и OS/2 интерпретатором командной строки является программа cmd.exe. Однако, для совместимости с DOS-приложениями, COMMAND.COM присутствует и в версиях этих систем для процессоров архитектуры IA-32.





Режимы работы

COMMAND.COM имеет два режима работы. Первый режим — интерактивный, когда пользователь вводит с клавиатуры команды, которые немедленно выполняются. Второй режим — пакетный, когда COMMAND.COM выполняет последовательность команд, заранее сохранённую в пакетном файле с расширением .BAT. Функции COMMAND.COM аналогичны функциям командных интерпретаторов Unix-совместимых операционных систем (например, bash), с тем отличием, что COMMAND.COM имеет более ограниченный набор возможностей.[2][3]

Команды

Команды COMMAND.COM делятся на внутренние, и внешние. Внутренние команды поддерживаются самим COMMAND.COM, внешние команды являются файлами, которые хранятся на дисках и имеют расширение .COM, .EXE или .BAT.[4][5]

Часть внутренних команд используются в пакетных файлах для их оформления, организации их работы и для управления последовательностью выполнения прочих команд. Среди них:

:имя_метки 
Задание имени метки для команды GOTO. Часто используется и в качестве комментария.
FOR 
Повтор некоторой команды для каждого файла из заданного списка.
GOTO 
Переход к метке внутри пакетного файла.
REM 
Комментарий: любой текст в строке после этой команды игнорируется.
IF 
Задание условия, в зависимости от которого происходит выполнение разных команд.
CALL 
Приостановка выполнения текущего командного файла, запуск другого, по окончании работы вызванного файла возобновление выполнения текущего файла.[6]
START 
Запуск исполняемого или командного файла, указанного в параметре этой команды, без ожидания завершения его выполнения (только под Windows).

Переменные

Пакетные файлы для COMMAND.COM имеют четыре типа переменных:

  1. ERRORLEVEL содержит код возврата последней из запущенных программ (к примеру, в языке программирования Си код можно вернуть с помощью return в функции main).[7][8] Как правило, ERRORLEVEL используется для индикации ошибок при работе программы и код 0 означает успешное завершение. Но это относится в основном к утилитам командной строки (которые ориентированы на использование в пакетных файлах), прикладные программы обычно не заботятся о возврате конкретных значений, поэтому после них в ERRORLEVEL всегда оказывается нулевое значение или даже мусор.[9][10] В оригинальном COMMAND.COM код возврата можно было проверить только с помощью конструкции IF ERRORLEVEL[11], однако в некоторых клонах DOS, а также Windows семейства NT, добавлена возможность обращения к ERRORLEVEL как к обычной переменной.[12][13]
  2. Переменные могут быть заданы с помощью команды SET.[14] Чтобы получить их значение, нужно имя переменной окружить знаками % (например, %path%), в этом случае в месте использования такой конструкции будет подставлено значение переменной.[15] Некоторые из этих переменных стандартизованы (PROMPT, PATH, TEMP и т. п.), некоторые задаются системой (CONFIG), остальные задаются и используются пользователями. Хранятся эти переменные в «окружении» (environment) и называются «переменными окружения».[16]
  3. Аргументы пакетных файлов в самих пакетных файлах доступны как %1%9.[17] Переменная %0 содержит текст команды (без аргументов), использованной для запуска пакетного файла.[18]
  4. Переменные для команды FOR имеют вид %%a и используются в пакетных файлах совместно с этой командой.[18]

Параметры командной строки

COMMAND.COM может быть запущена не только в ходе начальной загрузки, но и, подобно любому исполняемому файлу MS-DOS, другой программой с помощью стандартной функции MS-DOS EXEC (функция 4bH прерывания 21H). При запуске без параметров запускается экземпляр интерпретатора, и управление передаётся пользователю, который может закрыть этот экземпляр и вернуть управление породившей его программе, введя команду EXIT. Но намного чаще используется запуск COMMAND.COM из других программ с параметрами /C и (реже) /K.

Параметр /C

Параметр /C предназначен для запуска в пакетном режиме. Синтаксис запуска: COMMAND.COM /C команда Командой может быть любая внутренняя или внешняя команда COMMAND.COM, в том числе BAT-файл. После исполнения команды работа COMMAND.COM завершается, и управление возвращается породившей его программе.

Параметр /K

Параметр /K полностью аналогичен параметру /C с той разницей, что после исполнения команды экземпляр интерпретатора не завершается, и управление передаётся пользователю, который может закрыть этот экземпляр и вернуть управление породившей его программе, введя команду EXIT.

См. также

Напишите отзыв о статье "COMMAND.COM"

Примечания

  1. [support.microsoft.com/kb/95554 Q95554: Not Using the /P Switch with the SHELL Command] (англ.). Microsoft (18 января 2007). — См.: Background Information on SHELL and /P. Проверено 15 января 2010. [www.webcitation.org/65RcWAaIO Архивировано из первоисточника 14 февраля 2012].
  2. [www.delorie.com/gnu/docs/make/make_50.html 5.2 Command Execution] (англ.). GNU Make Manual. Delorie (англ.) (июнь 2003). — «The stock shell, `command.com', is ridiculously limited in its functionality and many users of make tend to install a replacement shell»  Проверено 16 января 2010.
  3. «batch files are much more limited than their UNIX counterparts» // Colin Ritchie. [books.google.ru/books?id=JmkiE2Ut7ysC&pg=PA41 User Interface] // Operating systems incorporating UNIX and Windows. — 4-е изд. — Cengage Learning EMEA, 2003. — P. 41. — 279 p. — ISBN 0-82-646416-5, ISBN 978-0-8264-6416-3.
  4. [support.microsoft.com/kb/71986 Q71986: MS-DOS 5.0 Internal and External Commands] (англ.). Microsoft (3 декабря 1999). Проверено 15 января 2010. [www.webcitation.org/65RcXqB2S Архивировано из первоисточника 14 февраля 2012].
  5. [technet.microsoft.com/en-us/library/cc722477.aspx Batch Commands] (англ.). TechNet Library → MS-DOS. Microsoft. Проверено 15 января 2010. [www.webcitation.org/65RcYpWvJ Архивировано из первоисточника 14 февраля 2012].
  6. Если вызвать из пакетного файла другой пакетный файл напрямую, без помощи команды CALL, то возврата из вызванного пакетного файла не будет, он заменит первый пакетный файл.
  7. [support.microsoft.com/kb/57658 Q57658: Setting the MS-DOS Errorlevel in a Program] (англ.). Microsoft (12 мая 2003). Проверено 15 января 2010. [www.webcitation.org/65RcZPC7Q Архивировано из первоисточника 14 февраля 2012].
  8. [msdn.microsoft.com/en-us/library/0fwzzxz2.aspx Main() Return Values (C# Programming Guide)] (англ.). Microsoft (июль 2009). Проверено 15 января 2010. [www.webcitation.org/65RcaOmpP Архивировано из первоисточника 14 февраля 2012].
  9. [support.microsoft.com/kb/81819 Q81819: Exit Codes or Errorlevels Set by MS-DOS Commands] (англ.). Microsoft (16 ноября 2006). Проверено 15 января 2010. [www.webcitation.org/65Rcb06Se Архивировано из первоисточника 14 февраля 2012].
  10. [support.microsoft.com/kb/41533 Q41533: Basic 7.00 Can Return Exit Code (Error Level) to Batch File] (англ.). Microsoft (21 ноября 2006). Проверено 15 января 2010. [www.webcitation.org/65Rcc2pt1 Архивировано из первоисточника 14 февраля 2012].
  11. [support.microsoft.com/kb/69576 Q69576: Testing for a Specific Error Level in Batch Files] (англ.). Microsoft (16 ноября 2006). Проверено 15 января 2010. [www.webcitation.org/65Rcd2azK Архивировано из первоисточника 14 февраля 2012].
  12. [www.drdos.com/dosdoc/usergeng/07ugch7.htm#780 Using System Information] (англ.). Caldera DR-DOS 7.03 User Guide → Chapter 7 Batch Processing. Caldera (1998). Проверено 15 января 2010. [www.webcitation.org/65Rce2roS Архивировано из первоисточника 14 февраля 2012].
  13. [www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/if.mspx?mfr=true If] (англ.). Windows XP Professional Product Documentation. Microsoft. Проверено 15 января 2010. [www.webcitation.org/65RceVFPQ Архивировано из первоисточника 14 февраля 2012].
  14. [technet.microsoft.com/en-us/library/cc722868.aspx#XSLTsection125121120120 Set] (англ.). TechNet Library → MS-DOS. Microsoft. — Описание команды SET. Проверено 15 января 2010. [www.webcitation.org/65RcfDv3n Архивировано из первоисточника 14 февраля 2012].
  15. [support.microsoft.com/kb/41246 Q41246: How to Use Environment Variable Substitution in Batch Files] (англ.). Microsoft (10 мая 2003). Проверено 15 января 2010. [www.webcitation.org/65RcfmgMN Архивировано из первоисточника 14 февраля 2012].
  16. [support.microsoft.com/kb/69846 Q69846: DOS Environment Table Description; Basic’s ENVIRON Statement] (англ.). Microsoft (16 августа 2005). — Технические детали реализации окружения. Проверено 15 января 2010. [www.webcitation.org/65RcglwnT Архивировано из первоисточника 14 февраля 2012].
  17. [technet.microsoft.com/en-us/library/cc722868.aspx#XSLTsection130121120120 Shift] (англ.). TechNet Library → MS-DOS. Microsoft. — Описание команды SHIFT. Проверено 15 января 2010. [www.webcitation.org/65RcfDv3n Архивировано из первоисточника 14 февраля 2012].
  18. 1 2 [support.microsoft.com/kb/75634 Q75634: Percent Signs Stripped from Batch File Text] (англ.). Microsoft (10 мая 2003). Проверено 15 января 2010. [www.webcitation.org/65RchqFz6 Архивировано из первоисточника 14 февраля 2012].

Ссылки

  • [www.rsdn.ru/article/winshell/batanyca.xml Урок bat-аники] RSDN
  • MDGx / AXCEL216. [www.mdgx.com/newtip4.htm#COMMAND COMMAND.COM] (англ.). Windows 95/98/NT4/2000/ME/XP/2003 + DOS 7.xx/8.00 Tricks + Secrets Files. — Список всех опций COMMAND.COM, включая недокументированные. Проверено 16 января 2010.

Отрывок, характеризующий COMMAND.COM

– Андрей Севастьяныч, – сказал Ростов, – ведь мы их сомнем…
– Лихая бы штука, – сказал ротмистр, – а в самом деле…
Ростов, не дослушав его, толкнул лошадь, выскакал вперед эскадрона, и не успел он еще скомандовать движение, как весь эскадрон, испытывавший то же, что и он, тронулся за ним. Ростов сам не знал, как и почему он это сделал. Все это он сделал, как он делал на охоте, не думая, не соображая. Он видел, что драгуны близко, что они скачут, расстроены; он знал, что они не выдержат, он знал, что была только одна минута, которая не воротится, ежели он упустит ее. Пули так возбудительно визжали и свистели вокруг него, лошадь так горячо просилась вперед, что он не мог выдержать. Он тронул лошадь, скомандовал и в то же мгновение, услыхав за собой звук топота своего развернутого эскадрона, на полных рысях, стал спускаться к драгунам под гору. Едва они сошли под гору, как невольно их аллюр рыси перешел в галоп, становившийся все быстрее и быстрее по мере того, как они приближались к своим уланам и скакавшим за ними французским драгунам. Драгуны были близко. Передние, увидав гусар, стали поворачивать назад, задние приостанавливаться. С чувством, с которым он несся наперерез волку, Ростов, выпустив во весь мах своего донца, скакал наперерез расстроенным рядам французских драгун. Один улан остановился, один пеший припал к земле, чтобы его не раздавили, одна лошадь без седока замешалась с гусарами. Почти все французские драгуны скакали назад. Ростов, выбрав себе одного из них на серой лошади, пустился за ним. По дороге он налетел на куст; добрая лошадь перенесла его через него, и, едва справясь на седле, Николай увидал, что он через несколько мгновений догонит того неприятеля, которого он выбрал своей целью. Француз этот, вероятно, офицер – по его мундиру, согнувшись, скакал на своей серой лошади, саблей подгоняя ее. Через мгновенье лошадь Ростова ударила грудью в зад лошади офицера, чуть не сбила ее с ног, и в то же мгновенье Ростов, сам не зная зачем, поднял саблю и ударил ею по французу.
В то же мгновение, как он сделал это, все оживление Ростова вдруг исчезло. Офицер упал не столько от удара саблей, который только слегка разрезал ему руку выше локтя, сколько от толчка лошади и от страха. Ростов, сдержав лошадь, отыскивал глазами своего врага, чтобы увидать, кого он победил. Драгунский французский офицер одной ногой прыгал на земле, другой зацепился в стремени. Он, испуганно щурясь, как будто ожидая всякую секунду нового удара, сморщившись, с выражением ужаса взглянул снизу вверх на Ростова. Лицо его, бледное и забрызганное грязью, белокурое, молодое, с дырочкой на подбородке и светлыми голубыми глазами, было самое не для поля сражения, не вражеское лицо, а самое простое комнатное лицо. Еще прежде, чем Ростов решил, что он с ним будет делать, офицер закричал: «Je me rends!» [Сдаюсь!] Он, торопясь, хотел и не мог выпутать из стремени ногу и, не спуская испуганных голубых глаз, смотрел на Ростова. Подскочившие гусары выпростали ему ногу и посадили его на седло. Гусары с разных сторон возились с драгунами: один был ранен, но, с лицом в крови, не давал своей лошади; другой, обняв гусара, сидел на крупе его лошади; третий взлеаал, поддерживаемый гусаром, на его лошадь. Впереди бежала, стреляя, французская пехота. Гусары торопливо поскакали назад с своими пленными. Ростов скакал назад с другими, испытывая какое то неприятное чувство, сжимавшее ему сердце. Что то неясное, запутанное, чего он никак не мог объяснить себе, открылось ему взятием в плен этого офицера и тем ударом, который он нанес ему.
Граф Остерман Толстой встретил возвращавшихся гусар, подозвал Ростова, благодарил его и сказал, что он представит государю о его молодецком поступке и будет просить для него Георгиевский крест. Когда Ростова потребовали к графу Остерману, он, вспомнив о том, что атака его была начата без приказанья, был вполне убежден, что начальник требует его для того, чтобы наказать его за самовольный поступок. Поэтому лестные слова Остермана и обещание награды должны бы были тем радостнее поразить Ростова; но все то же неприятное, неясное чувство нравственно тошнило ему. «Да что бишь меня мучает? – спросил он себя, отъезжая от генерала. – Ильин? Нет, он цел. Осрамился я чем нибудь? Нет. Все не то! – Что то другое мучило его, как раскаяние. – Да, да, этот французский офицер с дырочкой. И я хорошо помню, как рука моя остановилась, когда я поднял ее».
Ростов увидал отвозимых пленных и поскакал за ними, чтобы посмотреть своего француза с дырочкой на подбородке. Он в своем странном мундире сидел на заводной гусарской лошади и беспокойно оглядывался вокруг себя. Рана его на руке была почти не рана. Он притворно улыбнулся Ростову и помахал ему рукой, в виде приветствия. Ростову все так же было неловко и чего то совестно.
Весь этот и следующий день друзья и товарищи Ростова замечали, что он не скучен, не сердит, но молчалив, задумчив и сосредоточен. Он неохотно пил, старался оставаться один и о чем то все думал.
Ростов все думал об этом своем блестящем подвиге, который, к удивлению его, приобрел ему Георгиевский крест и даже сделал ему репутацию храбреца, – и никак не мог понять чего то. «Так и они еще больше нашего боятся! – думал он. – Так только то и есть всего, то, что называется геройством? И разве я это делал для отечества? И в чем он виноват с своей дырочкой и голубыми глазами? А как он испугался! Он думал, что я убью его. За что ж мне убивать его? У меня рука дрогнула. А мне дали Георгиевский крест. Ничего, ничего не понимаю!»
Но пока Николай перерабатывал в себе эти вопросы и все таки не дал себе ясного отчета в том, что так смутило его, колесо счастья по службе, как это часто бывает, повернулось в его пользу. Его выдвинули вперед после Островненского дела, дали ему батальон гусаров и, когда нужно было употребить храброго офицера, давали ему поручения.


Получив известие о болезни Наташи, графиня, еще не совсем здоровая и слабая, с Петей и со всем домом приехала в Москву, и все семейство Ростовых перебралось от Марьи Дмитриевны в свой дом и совсем поселилось в Москве.
Болезнь Наташи была так серьезна, что, к счастию ее и к счастию родных, мысль о всем том, что было причиной ее болезни, ее поступок и разрыв с женихом перешли на второй план. Она была так больна, что нельзя было думать о том, насколько она была виновата во всем случившемся, тогда как она не ела, не спала, заметно худела, кашляла и была, как давали чувствовать доктора, в опасности. Надо было думать только о том, чтобы помочь ей. Доктора ездили к Наташе и отдельно и консилиумами, говорили много по французски, по немецки и по латыни, осуждали один другого, прописывали самые разнообразные лекарства от всех им известных болезней; но ни одному из них не приходила в голову та простая мысль, что им не может быть известна та болезнь, которой страдала Наташа, как не может быть известна ни одна болезнь, которой одержим живой человек: ибо каждый живой человек имеет свои особенности и всегда имеет особенную и свою новую, сложную, неизвестную медицине болезнь, не болезнь легких, печени, кожи, сердца, нервов и т. д., записанных в медицине, но болезнь, состоящую из одного из бесчисленных соединений в страданиях этих органов. Эта простая мысль не могла приходить докторам (так же, как не может прийти колдуну мысль, что он не может колдовать) потому, что их дело жизни состояло в том, чтобы лечить, потому, что за то они получали деньги, и потому, что на это дело они потратили лучшие годы своей жизни. Но главное – мысль эта не могла прийти докторам потому, что они видели, что они несомненно полезны, и были действительно полезны для всех домашних Ростовых. Они были полезны не потому, что заставляли проглатывать больную большей частью вредные вещества (вред этот был мало чувствителен, потому что вредные вещества давались в малом количестве), но они полезны, необходимы, неизбежны были (причина – почему всегда есть и будут мнимые излечители, ворожеи, гомеопаты и аллопаты) потому, что они удовлетворяли нравственной потребности больной и людей, любящих больную. Они удовлетворяли той вечной человеческой потребности надежды на облегчение, потребности сочувствия и деятельности, которые испытывает человек во время страдания. Они удовлетворяли той вечной, человеческой – заметной в ребенке в самой первобытной форме – потребности потереть то место, которое ушиблено. Ребенок убьется и тотчас же бежит в руки матери, няньки для того, чтобы ему поцеловали и потерли больное место, и ему делается легче, когда больное место потрут или поцелуют. Ребенок не верит, чтобы у сильнейших и мудрейших его не было средств помочь его боли. И надежда на облегчение и выражение сочувствия в то время, как мать трет его шишку, утешают его. Доктора для Наташи были полезны тем, что они целовали и терли бобо, уверяя, что сейчас пройдет, ежели кучер съездит в арбатскую аптеку и возьмет на рубль семь гривен порошков и пилюль в хорошенькой коробочке и ежели порошки эти непременно через два часа, никак не больше и не меньше, будет в отварной воде принимать больная.