
- •«Операционные системы, среды и оболочки» Лабораторная работа №2 «Программирование командных bat-файлов в Windows» теория
- •Xcopy %1 %2 /s
- •If errorlevel 1 goto ErrOccurred
- •If errorlevel 2 goto Choice2
- •If errorlevel 1 goto Choice 1
- •Как запустить командный файл с параметрами?
- •Как осуществлять поиск внутри внешних файлов из командного файла ?
- •Упражнения
- •If errorlevel 0 goto Success
- •If errorlevel 3 goto DirToPrn
- •If errorlevel 2 goto DirToFile
- •If errorlevel 1 goto DirToCon
- •Задания
If errorlevel 1 goto ErrOccurred
echo Копирование прошло без проблем.
goto EndBatch
:ErrOccurred
echo При выполнение команды возникла ошибка !
:EndBatch
К сожалению, в командных файлах нет возможности организовать полноценный диалог с пользователем путем ввода строк с клавиатуры. Единственное средство – команда CHOICE, которая выводит подсказку и ждет выбора пользователем варианта из указанного набора клавиш.
CHOICE [/C[:]варианты] [/N] [/S] [/T[:]c,nn] [текст]
choice /N /T:y,%сек% > nul - таймер (на n секунд задерживает выполнение последующих команд);
%команда% > nul - запрещение вывода на экран самой команды и результата её действия (полезно при команде "copy"). Пример: copy c:some.exe %windir%some.exe > nul;
Если в команде не задается текст, то пользователь видит на экране только подсказку. Рассмотрим подробно ключи этой команды:
Ключ |
Описание |
Пример |
На экране |
/С |
задает варианты ответа, по умолчанию YN |
CHOICE /C:ync Как дела ? |
Yes, No, Cancel [Y, N, C] ? Как дела |
/N |
выводит только текст без вариантов ответа (клавиши для ответа работают) |
CHOICE /N Ну как |
Ну как |
/S |
учет регистра символов (по умолчанию верхний и нижний воспринимаются одинаково) |
|
|
/T |
c – символ по умолчанию, который вводится после указанной в nn секунд паузы |
CHOICE /c:ync /t:N,10 |
[Y, N, C] ? (после 10 сек выбирается N) |
После выполнения команды CHOICE переменная ERRORLEVEL приобретает значение, равное номеру варианта ответа, что позволяет использовать команду IF для организации ветвления. Если происходит ошибка, CHOICE возвращает 255, прерывание по <CTRL>+<C> или < CTRL >+<Break> - 0. В качестве примера рассмотрим простейшее меню:
@ECHO OFF
ECHO Выберите режим
ECHO 1 - Простой
ECHO 2 - Расширенный
ECHO.
CHOICE /c:12 Введите пункт меню
If errorlevel 2 goto Choice2
If errorlevel 1 goto Choice 1
ECHO Выход из меню
GOTO Done
:Choice1
ECHO Выбран пункт 1
GOTO Done
:Choice2
ECHO Выбран пункт 2
GOTO Done
:Done
Как изменить цвет в пределах командного файла?
В Windows NT Workstation 4.0 для изменения цвета Command Prompt можно использовать команду Color. Пример:
C:\> color 06
устанавливает цвета в желтый на черном. То есть, первая цифра - цвет фона (черный), вторая - цвет переднего плана (желтый).
Таблица допустимых цветов:
0 - Черный
1 - Синий
2 - Зеленый
3 - Аква
4 - Красный
5 - Пурпурный
6 - Желтый
7 - Белый
8 - Серый
9 - Светло-синий
A - Светло-зеленый
B - Светлый аква
C - Светло-красный
D - Светло-пурпурный
E - Светло-желтый
F - Ярко белый
Так, цвет 2F - это зеленый фон и ярко белый (bright white). Даже и не знаю, как это правильно на русский перевести...) передний план.
Как запустить командный файл с параметрами?
Для этого запустите командный файл с параметром %1, %2 и т.д. Пример для hello.bat:
@echo hello %1 Harchenko
На выходе получим:
hello Andrey Harchenko
если вызывается файл "hello.bat Andrey" (не требуется вводить расширение .bat)
Также вы можете использовать следующие параметры:
Параметр |
Описание |
%1 |
Стандартный параметр |
%~f1 |
Расширяет %1 до полного пути к файлу. Если вы только ввели имя файла, этот параметр расширит его включением драйва/директории |
%~d1 |
Извлекает имя драйва из %1. |
%~p1 |
Извлекает путь из %1 |
%~n1 |
Извлекает имя файла из %1 но без расширения |
%~x1 |
Извлекает расширение файла из %1 |
%~s1 |
Изменяет длинное имя и расширение файла до стандартного 8.3 Используется как %~sn1 для короткого имени файла и как %~sx1 для короткого расширения |
Можно объеденить несколько параметров:
Параметр |
Описание |
%~dp1 |
Расширяет %1 только до имени драйва и пути |
%~nx1 |
Расширяет %1 только до имени и расширения файла |
Чтобы увидеть как все это работает, вставьте в командный файл testing.bat следующее:
@echo off echo fully qualified name %~f1 echo drive %~d1 echo path %~p1 echo file name %~n1 echo file extension %~x1 echo short file name %~sn1 echo short file extension %~sx1 echo drive and directory %~dp1 echo file name and extension %~nx1
Запустите этот файл с файлом, имеющим длинное име и расширение. Например, для c:\temp\longfilename.long получите следующее:
fully qualified name c:\TEMP\longfilename.long drive c: path \TEMP\ file name longfilename file extension .long short file name LONGFI~1 short file extension .LON drive and directory c:\TEMP\ file name and extension longfilename.long
Данный пример рассматривает параметр %~f1. Для всех последующих (%~f2, %~f3 и т.д.) все делается аналогично.