Программирование в DOS и Windows. Кое-что о DOS

До сих пор мы не акцентировали Ваше внимание на то в какой операционной системе мы работаем. Для начала программирования на Си это не имеет большого значения. Однако теперь мы можем сказать, что настоящее программирование в Windows начнется только с Главы 4. В данном параграфе мы поговорим о принципиальных особенностях программирования в среде MS DOS и Windows.

Значительная часть времени в программировании уходит на про-граммирование внешних устройств. Причем под внешними устройствами понимается и работа с памятью, файловой системой, дисплеем, клавиатурой, мышью и т.д. Основным отличием операционной системы Windows от MS DOS является то, все управление всеми внешними устройствами Windows берет на себе. Ниже на рисунке представлена схема взаимодействия приложения с внешними устройствами в системах MS DOS и Windows

Беря на себя взаимодействие с внешними устройствами Windows позволяет создавать более надежное и совместимое программное обеспечение.

Вторым преимуществом операционной системы Windows является ее многозадачность. Все задачи, запускаемые в ОС оказываются совершенно равноправными по отношению к рессурсам микропроцессора. Замечательно и то, что многозадачность возможна и в рамках одной задачи, когда две функции могут выполняться параллельно и независимо друг от друга.

Еще одной особенностью програмирования в среде Windows является присутствие только одной модели памяти. в Windows используется так называемая линейная или плоская модели памяти. Суть этой модели заключается в том, что содержание всех сегментных регистров фиксируется, а адресация осуществляется с помощью 32-битных регистров. Такая модель основывается на так называемой страничной адресации в защищенном режиме. Для программирования это дает значительные преимущества, заключающиеся в том, что поскольку сегментом теперь является вся память, то снимаются все ограничения на размер кода, данных, стека и объема отводимого под локальные переменные.

К особенностям программирования в Windows мы еще вернемся в Главе 4, а пока познакомимся с тем, как можно непосредственно использовать системные вызовы в программах для операционной системы MS DOS.

Ниже приведена программа, которая для печати строки использует системный вызов (так называемое 21-е прерывание).

#include

#include

char *s="Печать с помощью системного вызова ";

struct REGPACK r;

r.r_ax=0x0200; /*функция 2, 21-его прерывания*/

r.r_ds=FP_SEG(s);

r.r_bx=FP_OFF(s);

while (*(char *)MK_FP(r.r_ds,r.r_bx)!=0)

r.r_dx=*(char *)MK_FP(r.r_ds,r.r_bx);

Прокоментируем программу. В программе используется функция INTR, позволяющая осуществлять системные вызовы операционной системы MS DOS. Эти системные вызовы называются прерываниями и имеют свой номер. Наиболее часто используемое прерывание имеет номер 21 (шестнадцатиричный). В нашей программе мы используем функцию 2 этого прерывания, которая позволяет печатать один символ, код которого помещен в регистр DX. Для работы с регистрами используется предопределенная структура REGPACK. Особо обращаем внимание на функции FP_SEG, FP_OFF, MK_FP. FP_SEG и FP_OFF позволяют получать по указателю сегментный адрес и смещение. Функция MK_FP наоборот формирует указатель исходя из сегментного адреса и смещения. Напоминаем, что на конце строки стоит символ с кодом 0, на чем и основывается выход из цикла.

Многие сегодняшние начинающие программисты выросли на Windows. И кто-то наверно уже не знает, что до того, как появилась Windows, пользователи работали в операционной системе DOS.

DOS очень сильно отличается от Windows. Намного сильнее, чем Windows 7 от Windows 8. И поэтому, когда возникает необходимость работы в ДОС, у большинства пользователей это вызывает шок и глубокую депрессию.

Чтобы уберечь вас от этих последствий, я решил написать небольшую статью о работе в операционной системе ДОС.

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

Самой первой ОС для первого же компьютера IBM PC, созданного в 1981г., является DOS - Disk Operating System (Дисковая операционная система). Она была разработана фирмой MicroSoft и поэтому имела приставку MS (полное ее имя MS-DOS). Другие фирмы также занимались разработкой подобных систем, которые мало чем отличались друг от друга, но в своих названиях имели другие приставки (PC-DOS, NW-DOS, DR-DOS и др.). Обычно эти приставки не упоминают, и пишут просто DOS.

Ядро, то сеть основную часть MS-DOS составляют три файла:

  1. IO.SYS
  2. MSDOS.SYS
  3. COMMAND.COM
Файл IO.SYS как бы продолжает собой BIOS, предоставляя более широкий набор функций. Файл MSDOS.SYS отвечает за работу основных устройств, входящих в состав компьютера. Третий файл, COMMAND.COM, представляет собой командный процессор, с помощью которого пользователь может вводить команды, используя клавиатуру.

В настоящее время в DOS почти никто не работает, так как появились более современные операционные системы, такие как WINDOWS 95/98/ME/2000/XP/7/8 и другие, не только Windows, но и, например, Android. Справедливости ради следует отметить, что все они (ну или почти все) базируются на старом добром DOSе.

Поэтому изучение DOS никому не повредит - в жизни пригодится. Хотя, начиная с WINDOWS XP, операционная система DOS уже не используется как основа. Отчасти по этой причине некоторые старые программы не работают с новыми версиями Windows.

Но если вы собираетесь серьезно заняться программированием, то изучить DOS просто необходимо. Потом сами поймете почему.

Здесь мы поговорим только о самых основных командах DOS. В отличие, например, от Windows, где вы можете выполнить одно и тоже действие разными способами (с помощью мыши или клавиатуры и т.п.), в DOS все команды пишутся в Командной строке, а выполняются эти команды после нажатия на клавишу ENTER. После загрузки DOS вы увидите такую строку (приглашение):

где С - это имя диска. Чтобы перейти на другой диск (например, на диск А), наберите

и нажмите ENTER. Буква может быть как большой, так и маленькой.

ПРИМЕЧАНИЕ
Чтобы потренироваться работать в командной строке, необязательно перезагружать компьютер в DOS. Windows тоже имеет командную строку, которая "работает" по тем же принципам. Щелкните по кнопке ПУСК и выберите пункт меню ВЫПОЛНИТЬ (для Windows ME). Перед вами откроется окно с командной строкой. В эту строку и нужно вписывать команду, после чего, также как и в DOS, следует нажать клавишу ENTER или щелкнуть по кнопке ОК.

Пакетные (командные) файлы
С помощью команд DOS можно создавать так называемые пакетные файлы (их ещё называют "командные файлы", BAT-файлы, или просто "пакетники"). Поскольку Windows поддерживает команды DOS, то эти файлы будут работатьи в Windows. Системные администраторы и программисты до сих пор широко используют пакетные файлы. Чтобы разобраться с командными файлами, скачайте контрольную работу по этой теме.

Вид приглашения можно изменить командой PROMPT. Для этого в командной строке нужно набрать следующее:

PROMPT Текст

где Текст - любое текстовое сообщение. Например, после ввода команды:

PROMPT Привет

вместо стандартного С:\> будет выводиться слово Привет.

Практически все команды сводятся к открытию какого-либо файла или программы (вообще-то программа - это тоже файл). Общий вид команды, которая открывает файл:

С:\>Папка1\ . . . \ПапкаN\ИмяФайла

где С - это имя диска; Папка1 . . . ПапкаN - это имена каталогов (полный путь к файлу): ИмяФайла - имя файла с раширением. Если же такого файла нет, то будет выведено сообщение об ошибке.

ПРИМЕЧАНИЕ
Если вы работаете в командной строке Windows, то таким образом можно открыть практически любой файл. Если расширение файла не указывать, то откроется файл с расширением EXE, BAT или СОМ. Ну а если вы работаете в DOS, то открыть вы сможете только исполняемые файлы (программы). Поэтому расширение можно и не указывать.

Для примера рассмотрим такой вариант: нам нужно открыть файл с именем FILE.COM, который находится в папке TEXT, а эта папка, в свою очередь, находится в папке DOC. А папка DOC находится на диске С. Для этого пишем в командной строке следующее:

C:\>DOC\TEXT\FILE

и нажимаем ENTER. Если файл существует, то он откроется (точнее, запустится программа, так как файлы с расширением СОМ - это программы).

ПРИМЕЧАНИЕ
Если вы хотите поработать в условиях, "приближенным к боевым", то вы можете выбрать в главном меню (кнопка "Пуск") пункт "Сеанс MS-DOS". После запуска программы вы увидите черное окно, где и будет командная строка DOS. Здесь вы можете опробовать все приводимые в этой статье команды. Если же в главном меню вы почему-то не обнаружили вышеупомянутого пункта, то воспользуйтесь функцией поиска файлов, чтобы найти файл COMMAND.СОМ или СMD.EXE (для Windows NT*). Можно также просто открыть командную строку и ввести там COMMAND.СОМ или СMD.EXE (для Windows NT*).

О любой команде DOS вы можете получить короткую справку, набрав имя команды в командной строке с параметром "?". Например:

Если вы работаете не в "чистой" DOS, а под управлением Windows (см. ПРИМЕЧАНИЕ выше), то после нажатия клавиши ENTER вы получите примерно такую информацию:

Windows Millennium [Версия 4.90.3000]

Ну а если вы работаете в DOS, то получите информацию о версии DOS. Как вы поняли, команда VER выводит информацию о версии операционной системы.

Команда CD

Эта команда, как и большинство других, имеет несколько параметров:

CD\ - переход в корневой каталог данного диска. Например, если вы находитесь в

C:\DIR1\DIR2\DIR3

то после выполнения этой команды вы перейдете на диск С:

СD \GAME - переход к дочернему каталогу GAME из корневого каталога

СD GAME - переход к дочернему каталогу GAME из текущего каталога

CD.. - выход из каталога (переход к родительскому каталогу). Например, если вы находитесь в

C:\DIR1\DIR2\DIR3

то после выполнения этой команды вы перейдете в:

Команда DIR

DIR - просмотр списка директорий и файлов в данной директории

Однако, если файлов и директорий в текущем каталоге очень много, то все они промелькнут очень быстро, и вы сможете увидеть только последние из них, которые поместятся на странице. Если в таком случае нужно посмотреть все файлы и папки, то команду набирают с параметром "Р":

В этом случае на экран будет выведено столько файлов, сколько их там поместится. Чтобы посмотреть следующую "порцию" файлов, нужно нажать любую клавишу.

Команда MD

Эта команда создает новый каталог

MD PAPKA - создается каталог РАРКА в текущей папке или на текущем диске.

MD\PAPKA - создается каталог РАРКА в корневом каталоге.

MD С:\DIR\PAPKA - создается каталог РАРКА в каталоге DIR .

Команда REN

Эта команда переименовывает файл

REN FILE_1.txt F_1.txt - Файл FILE_1 переименовывается в F_1

Команда COPY

Эта команда копирует файлы

COPY C:\MYFILE\TEXT.ТХТ A:\ - копирование файла TEXT.ТХТ из каталога MYFILE на дискету А.

COPY C:\TEXT\*.ТХТ A:\ - копирование всех файлов с расширением ТХТ каталога ТЕХТ на дискету А.

COPY FILE_1.TXT A:\TEXT\FILE_2.TXT - копирование файла под новым именем из текущего каталога активного диска в каталог ТЕХТ диска А.

COPY F_1.TXT+F_2.TXT+F3.TXT F_END.TXT - объединение (слияние) трех файлов в один файл (F_END.TXT). Все четыре файла в текущем каталоге.

COPY FILE_1.TXT PRN - печать (копирование на принтер) файла FILE_1.TXT из текущего каталога.

COPY FILE_1.TXT CON - просмотр файла. Здесь в качестве параметра команды используется слово CON (сокращение от CONSOL). Это слово зарезервировано операционной системой для стандартных устройств ввода-вывода. При вводе данных этим устройством является клавиатура, при выводе - монитор. Аналогичного результата можно достичь командой TYPE FILE_1.TXT .

COPY CON FILE_1.TXT - создание (копирование с клавиатуры) нового текстового файла FILE_1.TXT в текущем каталоге. После выполнения этой команды можно вводить с клавиатуры любой текст. Для завершения процесса создания файла следует ввести специальный управляющий символ "конец файла". Для этого нужно нажать комбинацию клавиш Ctrl+Z, а затем нажать клавишу ENTER.

Команда XCOPY

Эта команда копирует каталоги.

XCOPY C:\TEXT\*.* A:\PAPKA\*.* /S /E - создание на дискете А каталога РАРКА (если его там не было) и копирование в нее всех каталогов и подкаталогов (включая пустые).

Команда DEL

Эта команда удаляет файлы.

DEL *.dat - удаление всех файлов с расширением DAT из текущего каталога

DEL *.* - удаление всех файлов из текущего каталога

DEL C:\TEXT\FILE.txt - удаление файла FILE.ТХТ из каталога ТЕХТ.

DEL C:\TEXT\*.doc /P - удаление всех файлов с расширением DOC из каталога ТЕХТ. Параметр Р означает, что перед удалением каждого файла у вас запросят подтверждение.

Команда RD

Эта команда удаляет пустые каталоги.

RD TEXT - удаление каталога ТЕХТ.

Команда PATH

Эта команда задает пути поиска файлов с исполнимыми программами.

PATH C:\;C:\Windows;C:\MyProg

Если вы введете такую команду, то вам уже не придется прописывать полный путь к файлам, которые находятся на диске С и в каталогах WINDOWS и MYPROG. Например, если в каталоге MYPROG у вас есть программа с именем PROGA, то после ввода вышеуказанной команды для запуска этой программы в командной строке будет достаточно написать PROGA и нажать ENTER. Обратите внимание, что при перечислении каталогов в команде PATH между ними НЕ ДОЛЖНО быть пробелов.

Команда EXIT

Эта команда осуществляет выход из программы COMMAND (Сеанс MS-DOS). Если вы запустили его из Windows, то обратно в Windows и вернетесь.

Текстовый редактор EDIT

Это простой и весьма удобный текстовый редактор. Он вам может пригодиться, чтобы посмотреть текстовые файлы, которые имеют досовскую кодировку символов. (В Windows вы можете открыть такие файлы с помощью блокнота, но только вместо нормального текста увидите набор "иероглифов"). Чтобы запустить этот редактор, наберите в командной строке слово EDIT и нажмите клавишу ENTER. Этот редактор можно запустить и из командной строки Windows.

ПРИМЕЧАНИЕ
Здесь имена всех команд напечатаны большими буквами, однако, это не имеет значения - можно писать и маленькими буквами.

И в заключение упомянем две команды для работы с диском:

FORMAT - форматирование диска

FORMAT A: - форматирование диска А. Прежде чем форматировать диск - хорошо подумайте: стоит ли?

FDISK - деление винчестера на логические диски. При этом ВСЯ информация на диске теряется. Если не знаете, что делаете - лучше не используйте эту команду. А вообще, эта команда требует более детального рассмотрения. Как-нибудь я к ней еще вернусь.

Заключение

Цель этой статьи - познакомить людей, воспитанных на Windows, с общими принципами работы в DOS. Как видите, все не так уж страшно. И если вы не хотите быть просто "юзером", то знание DOS вам необходимо. Да и вообще, как говорит один мой знакомый программист: "Винчестер в компьютере - вещь не главная". Однако Windows вы без винчестера не запустите - слишком много она места занимает, а вышеупомянутые три основных досовских файла легко умещаются на дискете (все вместе они занимают около 150КБ - размер зависит от версии). Поэтому советую всегда иметь загрузочную дискету - вдруг придется проверить компьютер, на котором нет винчестера или винчестер неисправен. Если у вас нет возможности создать загрузочную дискету "чистой" DOS, то это и не страшно. Создайте загрузочную дискету Windows - на ней будет все та же DOS, только с кучей разных полезных программ (драйверы CD-ROM, русификатор клавиатуры и т.п.).

Если у вас Windows 95\98\ME и им подобные, то сделать это можно так:

Пуск > Настройка > Панель Управления > Установка и удаление программ

Затем выбираете вкладку "Загрузочный диск" и нажимаете кнопку "Создать диск".

Чтобы загрузиться с дискеты, вставьте ее в дисковод, и перезагрузите компьютер. Если в вашей BIOS установлены настройки по умолчанию, то компьютер загрузится с дискеты. А загрузит он не что иное, как DOS. Ну а если компьютер загрузил Windows, то требуется изменить настройки BIOS. Но это уже другая тема...

И еще один полезный совет

В начале статьи я упоминал командную строку Windows. Этой строкой иногда удобнее пользоваться, чем щелкать по ярлыкам. Если на вашем компьютере слишком много разных программ, то весь рабочий стол "загажен" ярлыками. Это не только мешает любоваться красивыми "обоями" - найти с первого раза нужный ярлык будет непросто. А если еще мышь сломается? Поэтому программы, которыми вы часто пользуетесь, лучше запускать из командной строки. Однако в командной строке нужно писать полный путь к файлу, а это неудобно. Но данную проблему можно решить, например, сделав соответствующие изменения в файле AUTOEXEC.ВАТ. А если вы смутно представляете, что это за файл и зачем он нужен, то есть более простой способ. Например, у вас есть программа "MyProg", которая находится в папке "Progy" на диске "С". В этом случае запускать из командной строки ее нужно так:

Чтобы не писать полный путь, нужно сделать следующее:

  • Открываем папку "Progy"
  • Правой кнопкой мыши щелкаем на файле "MyProg"
  • Из меню выбираем пункт "Создать ярлык"
  • Созданный ярлык переименовываем (правая кнопка -> переименовать). Дадим ему имя, которое будет легко запомнить, например, "mp".
  • Этот ярлык перетаскиваем в папку WINDOWS (если Windows установлена у вас в другой папке, то в другую этот ярлык и перетаскиваем).
Все. Теперь можно легко запустить программу "MyProg" из командной строки. Пишем там

и нажимаем ENTER. См. также команду PATH .

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

Основное преимущество командной строки в том, что с ее помощью можно довольно быстро запускать программы, не пользуясь мышью. Если вы не знаете, как открыть командную строку без мыши, приведу один способ для Windows, который подойдет и для большинства версий Windows:

  • Нажимаем клавишу Win (это вторая клавиша от пробела). Появляется меню "Пуск". Меню "Пуск" можно открыть и другим способом, нажав комбинацию клавиш CTRL + ESC.
  • Нажимая клавишу со стрелкой вверх (или вниз), выбираем пункт меню "Выполнить" и нажимаем ENTER.
  • Пишем в командной строке соответствующую команду и нажимаем ENTER.

Второй способ:

  • Просто нажимаем комбинацию клавиш WIN + R.

Если у вас старая клавиатура, которая не имеет клавиши WIN, то открыть меню ПУСК можно комбинацией клавиш CTRL + ESC.

Командные файлы и программирование (часть 1)

Цель работы: научиться использовать программные элементы языка командных файлов

1. Командный файл как программа

Командный файл может выступать как обычный сценарий, представляющий набор последовательно выполняющихся программ. Но он, также, может содержать программные конструкции в виде условий, циклов, переходов по меткам по аналогии с программами.
В отличие от программы на языке программирования высокого уровня (С++, Basic, Pascal), командный файл устроен проще и может содержать ограниченное количество программных конструкций. От версии к версии операционной системы Windows язык командных файлов становится богаче.
В данной работе мы рассмотрим простейшие, базовые конструкции.

2. Простейшие сценарии с диалогами
Основные команды, часто применяемые в командных файлах для создания и манипулирования переменными:
echo вывод строки на экран
echo on включение режима "эхо"
echo off выключение режима "эхо"
rem строка комментария в командном файле
set присвоить значение переменной
set /p ввести данные

файл primer1.bat

@echo off
rem Приветствие
echo Privet!

Результатом работы этого файла будет вывод на экран слова Privet!. Если убрать из файла конструкцию @echo off, каждая срока файла будет выводится вместе с результатом выполнения команд.

файл primer2.bat

@echo off
rem Создание и использование переменных
set name=Vasya
echo %name%

В этом примере демонстрируется возможность создания переменной с именем name и присвоения ей значения Vasya. Если нужно вывести значение переменной на экран, то ее имя должно заключаться между символами %.

Для ввода данных используется конструкция set /p

файл primer3.bat

@echo off
rem Диалог с пользователем
set /p name="Enter your name - "
echo Your name is - %name%

В этом диалоге сначала запрашивается имя пользователя, а затем оно выводится на экран.

Задание 1.

1.1. Взять текст примеров, создать три командных файла primer1.bat, primer2.bat и primer3.bat и запустить их на выполнение. Проанализировать результат. Заменить первые строки файлов на @echo on и сравнить результаты выполнения с предыдущими.

1.2. Разработать командный файл, который запрашивает у пользователя по очереди имя и возраст, а затем выводит их вместе.

3. Специальные переменные
Существуют специальные переменные, значения которых формируются операционной системой. Укажем некоторые из них:

%CD% - Принимает значение строки текущей директории.

%DATE% - Принимает значение текущей даты.

%TIME% - Принимает значение текущего времени.

%RANDOM% - Принимает значение случайного десятичного числа в диапазоне 1 -32767.

%ERRORLEVEL% - Принимает текущее значение кода завершения задачи ERRORLEVEL

%CMDEXTVERSION% - Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.

%CMDCMDLINE% - Принимает значение строки, которая вызвала командный процессор.

%PATH% - список директорий для запуска программ.

%OS% - содержит название операционной системы.

В любой момент пользовательский сценарий может обратиться к значению этих переменных.

файл primer4.bat

@echo off
rem Использование специальных переменных
set date=%DATE%
set time=%TIME%
echo You are working on - %OS%
echo Date and time - %date%, %time%

Задание 2.

2.1. Написать командный файл, который выводит на экран значения системных переменных.
2.2. Написать командный файл, который выводит на экран три случайных числа.

4.Использование параметров командной строки
При запуске пакетных файлов в командной строке можно указывать произвольное число параметров, значения которых можно использовать внутри файла. Это позволяет, например, применять один и тот же командный файл для выполнения команд с различными параметрами.

Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*. При этом вместо подставляется имя выполняемого пакетного файла, вместо %0%1, %2, …, %9 - значения первых девяти параметров командной строки соответственно, а вместо %* - все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" переменные из %1 – %9 замещаются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat следующего содержания:
@ECHO OFF CLS ECHO File %0 copying directory %1 in %2 XCOPY %1 %2 /S

Если запустить его из командной строки с двумя параметрами, например
copier.bat C:\Programs D:\Backup

то на экран выведется сообщение
File copier.bat copying directory C:\Programs in D:\Backup

и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.

При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 - пустая строка.

Рассмотрим пример. Пусть командный файл my.bat вызван из командной строки следующим образом:
my.bat p1 p2 p3

Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.

При включении расширенной обработки команд SHIFT поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9.

Например, в следующей команде:
SHIFT /2

параметр %2 заменяется на %3, %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.

Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0), который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.

В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в табл. 3.1.
Таблица 3.1. Операторы для заменяемых параметровОператоры Описание
%~Fn Переменная %n расширяется до полного имени файла
%~Dn Из переменной %n выделяется только имя диска
%~Pn Из переменной %n выделяется только путь к файлу
%~Nn Из переменной %n выделяется только имя файла
%~Xn Из переменной %n выделяется расширение имени файла
%~Sn Значение операторов N и X для переменной %n изменяется так, что они работают с кратким именем файла
%~$PATH:n Проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %n заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку. Естественно, здесь переменную PATH можно заменить на любое другое допустимое значение

Данные синтаксические конструкции можно объединять друг с другом, например:

%~DPn - из переменной %n выделяется имя диска и путь,

%~NXn - из переменной %n выделяется имя файла и расширение.

Рассмотрим следующий пример. Пусть мы находимся в каталоге C:\TEXT и запускаем пакетный файл с параметром Рассказ.doc (%1=Рассказ.doc). Тогда применение операторов, описанных в табл. 3.1, к параметру %1 даст следующие результаты:
%~F1=C:\TEXT\Рассказ.doc %~D1=C: %~P1=\TEXT\ %~N1=Рассказ %~X1=.doc %~DP1=C:\TEXT\ %~NX1=Рассказ.doc

Задание 3.

3.1 Создать в C:\Temp пакетный файл spr.bat, который при запуске его с параметром (параметр – имя соответствующей команды) создает текстовый файл, который должен содержать справку по данной команде команде (например, при запуске spr if – в C:\Temp должен быть создан файл if.txt, содержащий описание этой команды). Создать с помощью пакетного файла spr.bat текстовые файлы if.txt, goto.txt, for.txt, rem.txt, echo.txt.

3.2 Создать командный файл find.bat, который ищет в системных каталогах и выводит на экран полное путевое имя программ notepad.exe и calc.exe

3.3. Написать командный файл, который принимает три имени файла в качестве параметров и трижды сдвигает эти параметры, а затем выводит на экран содержимое первого параметра.

5. Операции с переменными

Из переменной среды можно выделять подстроки с помощью конструкции %имя_переменной:~n1,n2%, где число n1 определяет смещение (количество пропускаемых символов) от начала (если n1 положительно) или от конца (если n1 отрицательно) соответствующей переменной среды, а число n2 – количество выделяемых символов (если n2 положительно) или количество последних символов в переменной, которые не войдут в выделяемую подстроку (если n2 отрицательно). Если указан только один отрицательный параметр -n, то будут извлечены последние n символов. Например, если в переменной хранится строка "21.09.2007" (символьное представление текущая дата при определенных региональных настройках), то после выполнения следующих команд
SET dd1=%DATE:~0,2% SET dd2=%DATE:~0,-8% SET mm=%DATE:~-7,2% SET yyyy=%DATE:~-4%

новые переменные будут иметь такие значения: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007.

В-третьих, можно выполнять процедуру замены подстрок с помощью конструкции %имя_переменной:s1=s2% (в результате будет возвращена строка, в которой каждое вхождение подстроки s1 в соответствующей переменной среды заменено на s2). Например, после выполнения команд
SET a=123456 SET b=%a:23=99%

в переменной b будет храниться строка "199456". Если параметр s2 не указан, то подстрока s1 будет удалена из выводимой строки, т.е. после выполнения команды
SET a=123456 SET b=%a:23=%
в переменной b будет храниться строка "1456"

При включенной расширенной обработке команд (этот режим в Windows XP используется по умолчанию) имеется возможность рассматривать значения переменных среды как числа и производить с ними арифметические вычисления. Для этого используется команда SET с ключом /A. Приведем пример пакетного файла add.bat, складывающего два числа, заданных в качестве параметров командной строки, и выводящего полученную сумму на экран:
@ECHO OFF REM В переменной M будет храниться сумма SET /A M=%1+%2 ECHO Sum of %1 and %2 is %M%

Без ключа /A значения переменных рассматриваются как строки и числовые операции производиться не будут.

Задание 4.

4.1 Создать файл add1.bat, выполняющий сложение двух значений в виде чисел и создать файл add2.bat, в котором у команды set отсутствует ключ /A. Выполнить оба файла и проанализировать результат.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: