- •Министерство образования и науки Российской Федерации
- •1. Модель рабочего стола
- •2. Интерфейс командной строки
- •3. Компиляция, компоновка и выполнение программы
- •4. Командные файлы
- •5. Вывод символьной информации
- •6. Операции с целыми числами
- •7. Операции с вещественными числами
- •8. Операторы
- •9. Символы и строки
- •10 Передача параметров в командной строке
- •Министерство образования и науки Российской Федерации
- •Министерство образования и науки Российской Федерации
4. Командные файлы
Нам придется много раз компилировать программы, написанные на языке С. Достаточно утомительно каждый раз переписывать все параметры командной строки. Поэтому мы составим командный файл, который будет запускать компилятор в пакетном режиме. Этот файл также создается при помощи редактора notepad.exe, он должен иметь расширение .bat. Так как его основная работа – запуск компилятора bcc32.exe, то назовем его bcc.bat.
Наберем команду
notepad.exe bcc.bat,
подтвердим создание нового файла и введем в редактор следующий тект:
rem bcc.bat
if “%1”==“” goto error
path C:\Test\Bcc
bcc32.exe -I“C:\Test\Include” -L“C:\Test\Lib” %1.c
goto end
:error
echo Вы забыли указать имя программы (без расширения .c)
:end
Этот файл написан не на языке С, а на командном языке сеанса MS DOS. Его не надо компилировать, операционная система читает одну команду за другой и выполняет их. Расширение bat происходит от слова batch – пакет, оно означает, что файл выполняет группу команд как единое целое. Первая строка командного файла начинается со слова rem, это – начало комментария, концом комментария служит перевод строки. Как мы договорились, комменатрий должен содержать имя файла. Вторая строка содержит конструкцию %1; так обозначается аргумент пакетного файла. Теперь составим программу
/* prog2.c */
main()
{
return 2;
}
Если мы наберем в командной строке
bcc.bat prog2
то %1 будет именем слова prog2. Когда в командной строке стоит только имя пакетного файла bcc.bat аргумент пустой, “%1” - это просто пара двойных кавычек, два знака == - отношение равенства. Слово if служит началом оператора ветвления в пакетном файле, его формат
if [ NOT ] строка1 == строка2 команда
Операция NOT обращает истинность условия: истинное условие становится ложным, а ложное – истинным. Условие
строка1 == строка2
является истинным, когда эти строки совпадают, в этом случае оператор выполняет команду, стоящую после условия.
Слово NOT заключено в квадратные скобки, это означает, что оно является необязательной частью конструкции. Команду
if %1”==“” goto error
следует понимать так: если командный файл запущен с пустым аргументом, то выполняются команды, стоящие после метки error. Эту метку мы увидим ниже, двоеточие, с которого начинается строка с меткой, указывает, что error – метка, а не команда. За этой строкой находится строка с командой echo, она выводит на экран сообщение, напоминающее пользователю, что пакетный файл запускается с аргументом.
Если пользователь ввел аргумент – имя программы, то вместо перехода на метку error выполняется команда
path C:\Test\Bin
- теперь операционная система будет искать исполняемые файлы лишь в текущей директории и в директории Bin. Часто студенты говорят, что эта команда не нужна, «программа компилируется и так». На самом деле это означает, что список директорий поиска исполняемых файлов содержит путь к директории Bin пакета CBuilder, так что компилятор и компоновщик вызываются оттуда, откуда мы их копировали.
Следующая строка – вызов компилятора bcc32.exe с параметрами, указывающими имена директорий включаемых файлов и библиотек. Аргументом компилятора служит имя программы, в нашем случае – это аргумент пакетного файла %1. У любого файла с исходным текстом на языке С должно быть расширение .с; чтобы не повторять его каждый раз, мы передаем пакетному файлу имя файла - программы без расширения, а имя с расширением появляется при помощи конструкции %1.с. Команда безусловного перехода goto end позволяет обойти сообщение об ошибке, следующее за меткой error. После метки end команд нет, выполнение пакетного файла завершается.
В ходе выполнения пакетного файла на экран выводятся команды, которые он выполняет. Чтобы подавить их вывод используйте конструкцию
@echo off
(символ @ подавляет вывод на экран самой команды echo off):
rem bcc.bat
@echo off
if “%1”==“” goto error
path C:\Test\Bcc
bcc32.exe -I“C:\Test\Include” -L“C:\Test\Lib” %1.c
goto end
:error
echo Вы забыли указать имя программы (без расширения .c)
:end
Задание. Составьте пакетный файл bcc.bat и убедитесь, что он корректно работает.
Код, который программа возвращает операционной системе в момент завершения, позволяет эмулятору командной строки управлять последовательностью выполнения команд пакетного файла. Для этого используется конструкция errorlevel. Оператор ветвления с этой конструкцией имеет такой формат:
"if [ NOT ] ERRORLEVEL число команда.
Условие
ERRORLEVEL число
является истинным, если код возврата последней выполненной программы не меньше указанного числа.
Составим пакетный файл
rem test.bat
@echo off
prog2.exe
if ERRORLEVEL %1 echo Код возврата не меньше, чем %1
Исполняемый файл prog2.exe, полученный в результате компиляции программы prog2.c, возвращает операционной системе число 2 и завершается. Напомним, что программа test.bat представляет собой пакетный файл, её не надо компилировать. Запустим файл test/bat с аргументом 0:
test. bat 0
Первая команда после @echo off запускает файл prog2.exe.
Следующая команда состоит из двух частей. Первая часть - if ERRORLEVEL %1 - проверяет код возврата завершившейся программы и сравнивает его с аргументом - в нашем случае аргумент равен 0. Так как код возврата 2 не меньше, чем 0, то выполняется вторая часть: команда echo выводит на экран стоящее после неё сообщение: "Код возврата не меньше, чем 2". Запустим пакетный файл, увеличив аргумент:
test.bat 1.
На экране появится сообщений "Код возврата не меньше, чем 1". Запустим пакетный файл test.bat с аргументом 2. Условие ERRORLEVEL %1 по-прежнему будет истинным: 2 не меньше, чем 2. Команда echo выводит на экран сообщение: "Код возврата не меньше, чем 2". А после запуска
test.bat 3
на экране не появится никаких сообщений: код возврата 2 меньше, чем 3.
Задание. Cоставьте пакетный файл
rem test.bat
@echo off
prog2.exe
if NOT ERRORLEVEL %1 echo %1
Объясните результат выполнения следующих команд:
test.bat 0
test.bat 1
test.bat 2
test.bat 3