Система Orphus
Версия для печати

Особенности реализации командного процессора cmd.exe операционных систем WinNT

Или Урок bat-аники 2-ой

Автор: Андрей Дибров
Источник: RSDN Magazine #4-2007
Опубликовано: 15.03.2008
Исправлено: 10.12.2016
Версия текста: 1.6
Предисловие
Тестирование
Спецсимволы
Команда set
Создание переменной
Удаление переменной
Сброс ERRORLEVEL
Условный блок
Условный блок и ERRORLEVEL
Всё дело в скобках!
Командный процессор cmd.exe
Set и блок
Exit /b %ERRORLEVEL% и блок
Команда goto
Условный блок
Команда call
Команда call и блок
Двойное раскрытие переменной
Двойное раскрытие переменной и блок
Двойное раскрытие переменной и оператор “!”
Команды setlocal/endlocal
Оператор “!” или оператор “%”?
Восстанавливаем окружение после работы скрипта
Вызов с параметрами
Вызов внешнего приложения
Проблема обратного слеша (\)
Call-вызов скрипта и переменные %0-%9
Команда if и переменные %0-%9
Команда echo с точкой
И ещё немного о переменных
Спецсимволы в переменных
Комментарии в скриптах
Установка значения переменных из текстовых файлов
Установка значения переменных из стандартного вывода
Несколько слов о компиляторах
Есть ли замена cmd.exe?
Заключение
Приложение
Ключи реестра
Внешние утилиты и скрипты
Ссылки по теме
Использованные источники

Я спросил у сакуры,
Где та гейша, которая разбила мне сердце.
Сакура не ответила.
И это хорошо.
В нашем роду и так полно психов,
Которые говорят с деревьями и травой.
http://www.bash.org.ru

Предисловие

Желание организовать собранный материал в статью появилось после некоторых исследований работы bat-скриптов и накопления опыта по их составлению в проекте под Microsoft Visual Sudio 2005, интенсивно использующего промежуточные bat-скрипты для взаимодействия непосредственно с некоторыми сторонними консольными утилитами, участвующими в сборке.

В каждом разделе статьи будет рассматриваться та или иная проблема, будет оговорены её последствия или приведено наилучшее, по мнению автора, решение. Проведённые изыскания можно рассматривать отдельно, но крайне желательно это делать в том порядке, в котором они встречаются в статье, т.к. многие проблемы связаны друг с другом и что-то в дальнейшем может быть непонятно из-за пропущенных деталей.

Статья предусматривает, что читатель уже знаком с написанием bat-скриптов NT (далее просто скриптов), знает о применении команд и умеет пользоваться справкой по встроенным командам и прилагаемым утилитам командного процессора. В статье не рассматриваются сторонние утилиты, а также их проблемы и особенности работы.

ПРИМЕЧАНИЕ

Некоторые проблемы, найденные в скриптах, могут быть связаны с их использованием (запуском) из проекта для Microsoft Visual Studio 2005 (C++), а также, возможно, и других сред, использующих обращения к bat-скриптам.

В конце статьи приведены тексты bat-скриптов и ссылки на некоторые консольные утилиты, использовавшиеся при тестировании примеров.

Тестирование

Всё что здесь проверялось, а оно проверялось мной полностью только на одной системе, проверялось обычным образом, т.е. выводы о работе строились в основном на результатах выполнения тест-скриптов, их текст и приводятся в качестве аргументов к каждому пункту проблемы.

ПРЕДУПРЕЖДЕНИЕ

Здесь и далее все bat-скрипты тестировались в основном только под Windows XP Service Pack 2 (Build 2600.xpsp_sp2_gdr.070227-2254 : Service Pack 2). Возможно, это справедливо и для системы без сервис паков или с предыдущими сервис паками, но это особым образом не проверялось.

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

Всё сказанное в статье справедливо для так называемого расширенного режима cmd.exe (установлена переменная CMDEXTVERSION).

Чтобы детально ознакомиться с возможностями той или иной bat-команды, достаточно в командной строке окна консоли набрать help <имя команды> или <имя команды> /?. К примеру, help set или echo /?. Чтобы ознакомиться со списком поддерживаемых команд, нужно набрать просто help. Кроме того, вы можете ознакомиться со встроенным текстом справки Windows, набрав в окне консоли или в какой-либо командной оболочке "%windir%\help\ntcmds.chm", либо открыть Help Windows и найти тот же текст справки по ключевому тексту “Command-line reference”.

Спецсимволы

Команда set

Создание переменной

Удаление переменной

Сброс ERRORLEVEL

Условный блок

Условный блок и ERRORLEVEL

Всё дело в скобках!

Командный процессор cmd.exe

Set и блок

Exit /b %ERRORLEVEL% и блок

Команда goto

Условный блок

Команда call

Команда call и блок

Двойное раскрытие переменной

Двойное раскрытие переменной и блок

Двойное раскрытие переменной и оператор “!”

Команды setlocal/endlocal

Оператор “!” или оператор “%”?

Восстанавливаем окружение после работы скрипта

Вызов с параметрами

Вызов внешнего приложения

Проблема обратного слеша (\)

Call-вызов скрипта и переменные %0-%9

Команда if и переменные %0-%9

Команда echo с точкой

И ещё немного о переменных

Спецсимволы в переменных

Комментарии в скриптах

Установка значения переменных из текстовых файлов

Установка значения переменных из стандартного вывода

Несколько слов о компиляторах

Есть ли замена cmd.exe?

Заключение

Приложение

Ключи реестра

Запрет режима командной строки

Автовыполнение команд из разделов реестра «AutoRun»

Запрет расширенного режима командного процессора

Отложенное раскрытие переменных среды

Автозавершение имён файлов и папок

Внешние утилиты и скрипты

Ссылки по теме

Использованные источники


Полная версия этой статьи опубликована в журнале RSDN Magazine #4-2007. Информацию о журнале можно найти здесь