- •Лабораторная работа № 1-04
- •4.2. Вызов командного файла
- •4.3. Команды, используемые в командных файлах
- •4.3.1. Команда echoи префикс @
- •4.3.2. Команда cls
- •4.3.3. Командаrem
- •4.3.4. Командаcolor
- •4.3.5. Команды pushd и popd
- •4.3.6. Метки и команда goto
- •4.3.7. Команда if
- •If условие команда
- •4.3.8. Команда find
- •4.3.9. Команда findstr
- •4.3.10. Команда sort
- •4.3.11. Команда for
- •4.3.12. Команда set
- •4.3.13. Команды setlocalиendlocal
- •4.3.14. Команда call
- •4.3.15. Команда start
- •4.3.16. Команда cmd
- •4.3.17. Командаpause
- •Для продолжения нажмите любую клавишу . . .
- •4.4. Последовательности команд
- •4.5. Пример командного файла
- •5. Порядок выполнения работы
- •Вариант 5-01
- •Вариант 5-02
- •Вариант 5-03
- •Вариант 5-04
- •Вариант 5-05
- •Вариант 5-06
- •Вариант 5-07
- •Вариант 5-08
- •Вариант 5-09
- •Вариант 5-10
- •Вариант 5-11
- •Вариант 5-12
- •Вариант 5-13
- •Вариант 5-14
- •Вариант 5-15
- •6. Содержание отчета
- •7. Вопросы для самоконтроля
4.3.17. Командаpause
Команда паузыpauseпозволяет приостановить выполнение командного файла (например, для того, чтобы можно было поставить нужную дискету). При выполнении этой команды на экран выводится сообщение:
Для продолжения нажмите любую клавишу . . .
Выполнение командного файла при этом приостанавливается. Если нажать любую алфавитно-цифровую клавишу, ПробелилиEnter, выполнение командного файла будет продолжено.
4.4. Последовательности команд
В одной командной строке могут быть заданы несколько команд, т.е. последовательность команд. Команды в последовательности задаются следующим образом:
команда-1 & команда-2– команда-2 выполняется после команды-1;
команда-1 && команда-2– команда-2 выполняется после команды-1 только в том случае, если команда-1 завершилась успешно (с нулевым кодом);
команда-1 || команда-2– команда-2 выполняется после команды-1 только в том случае, если команда-1 завершилась с ошибкой (с ненулевым кодом);
(команда-1 & команда-2)– объединение команды-1 и команды-2 в группу.
4.5. Пример командного файла
Командный файл viewer.batвыводит содержимое текстовых файлов в окне редактораБлокнот, а содержимое командных файлов (с расширением.bat) – с помощью командыedit(выход из редактораБлокноти командыeditвыполняется с помощью командыВыходменюФайл).
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ ".").
Вторым (необязательным) параметром является тип файла:
bat– для командных файлов (с расширением.bat);
text– для текстовых файлов (с расширением.txt);
all –для всех файлов.
Если второй параметр не задан, для него предполагается значение all.
В начале выполнения командного файла выводится запрос на ввод строки поиска в файлах. В ответ на этот запрос вводится значение строки поиска или пустая строка. В первом случае в окне редактора Блокнотили командыeditвыводится наименование файла, и только те строки файла, которые содержат строку поиска. Если строк поиска в файле не обнаружено, выводится соответствующее сообщение. Во втором случае выводится все содержимое файла. После вывода строк поиска или содержимого файла выводится количество командных и/или текстовых файлов в папке.
Просмотр файлов заданных типов выполняется с помощью команды for.
При значении /? для первого параметра должна выводиться справка о командном файле: действие, вызов и пояснения к параметрам.
Ниже следует текст командного файла с пояснениями.
В начале командного файла можно вывести заголовок-пояснение:
@echo off
echo *****************************************
echo * Просмотр текстовых и командных файлов *
echo *****************************************
Строки командного файла, проверяющие задание первого параметра, записываются следующим образом:
rem Проверка первого параметра
if %1- EQU - (
rem Вывод сообщения об ошибке
echo Не задан первый параметр.
echo Для вывода справки введите viewer /?
rem Окончание выполнения командного файла
goto exit
)
Для вывода справки по командному файлу используется следующая последовательность команд:
rem Вывод справки
if -%1- EQU -/?- (
echo Командный файлviewer.batвыводит содержимое
echoфайлов в папке в окне текстового
echoредактора Блокнот для файлов с расширением.txt
echoили командыeditдля файлов с расширением.bat
echoВызов: viewerимя-папки [тип-файла]
echoЕсли для имени-папки вводится символ .,
echoто выводится оглавление текущей папки
echoПараметр тип-файла может иметь следующие значения:
echo bat- командные файлы
echo text - текстовые файлы
echo all - все файлы
echoЕсли тип-файла не задан, предполагается
echo значение all
echo В начале выполнения файла вводится строка поиска
echo или пустая строка – для отмены поиска в файлах
goto exit
)
Следующими шагами являются установка локального режима изменений переменных окружения и переход в папку, заданную в первом параметре с проверкой существования этой папки:
rem Установка локального режима
rem изменений переменных окружения
setlocal
rem Переход в папку, определенную первым параметром
if %1 NEQ . (
pushd %1
)
rem Если при выполнении команды произошла ошибка
if errorlevel 1 (
rem Вывод сообщения
echo Папка %1 не существует
rem Окончание выполнения командного файла
goto exit
)
Команда pushdзапоминает текущую папку и переходит в папку, заданную в первом параметре. Если такой папки не существует, команда завершается с ненулевым кодом. В этом случае выводится сообщение об ошибке и происходит переход на меткуexit.
Ввод строки поиска выполняется с помощью следующих команд:
rem ====== Ввод строки поиска ======
echoВведите строку поиска или пустую строку:
rem Ожидание и ввод строки поиска
set /p search_string=
Затем задаются два переключателя, определяющие вывод соответственно текстовых и командных файлов (значение yes– вывод файлов выполняется, значениеno– не выполняется). Первоначально оба переключателя устанавливаются вyes:
rem ====== Проверка второго параметра ======
rem Установка вывода командных файлов в yes
set bat_output=yes
rem Установка вывода текстовых файлов в yes
set text_output=yes
Если значение второго параметра не задано или равно all, состояние переключателей не изменяется и выполняется переход к меткеfiles_output:
rem Если второй параметр не задан
if -%2 EQU - (
rem Вывод файлов
goto files_output
)
rem Если второй параметр равен all
if %2 EQU all (
rem Вывод файлов
goto files_output
)
Если значение второго параметра равно bat, переключатель вывода текстовых файлов устанавливается вnoи выполняется переход к меткеfiles_output:
rem Если второй параметр равен bat
if %2 EQU bat (
rem Установка вывода текстовых файлов в no
set text_output=no
rem Вывод файлов
goto files_output
)
Если значение второго параметра равно text, переключатель вывода командных файлов устанавливается вnoи выполняется переход к меткеfiles_output:
rem Если второй параметр равен text
if %2 EQU text (
rem Установка вывода командных файлов в no
set bat_output=no
rem Вывод файлов
goto files_output
)
Если значение второго параметра задано, но не равно не all, неbatи неtext, т.е. является ошибочным, для обработки ошибки задаются следующие команды:
rem ====== Ошибка во втором параметре ======
echoНеверное значение %2 второго параметра.
echoДля вывода справки введитеviewer /?.
goto dir_restore
Далее выполняется вывод файлов, но сначала подсчитывается количество текстовых и командных файлов в папке с помощью следующих команд:
rem ====== Вывод файлов ======
:files_output
rem Задание начального значения
rem количества текстовых файлов в папке
set /a text_сount=0
rem Определение количества текстовых файлов
for %%f in (*.txt) do set /a text_сount+=1
rem Задание начального значения
rem количества командных файлов в папке
set /a bat_count=0
rem Определение количества командных файлов
for %%f in (*.bat) do set /a bat_count+=1
Вывод строк в текстовых файлах или текстовых файлов выполняется с помощью следующих команд:
rem Если есть вывод текстовых файлов
if %text_output% EQU yes (
rem Если есть текстовые файлы
if "%text_count%" NEQ "0" (
rem Если строка поиска - не пустая
if -%search_string% NEQ - (
rem Если строка найдена, запись
rem найденных строк во временный
rem файл и вывод найденных строк в
rem редакторе Блокнот, иначе
rem сообщение о том, что строка
rem в файле не найдена
for %%f in (*.txt) do
find %%f "%search_string%" >
temp$$$$.txt &&
(echo Вывод строк файла%%f &
C:\WINDOWS\Notepad.exe temp$$$$.txt &
erase temp$$$$.txt) ||
echo Файл %%f: нет строки поиска
) else (
rem Вывод содержимого файлов
rem в редакторе Блокнот
for %%f in (*.txt) do
echo Вывод файла %%f &
C:\WINDOWS\Notepad.exe %%f
)
rem Вывод количества текстовых файлов
echoТекстовых файлов в папке'%CD%':
%text_сount%
) else (
rem Вывод сообщения об отсутствии
rem текстовых файлов
echoВ папке%CD%нет текстовых файлов
)
)
Аналогично выполняется вывод командных файлов:
rem Если есть вывод командных файлов
if %bat_output% EQU yes (
rem Если есть командные файлы
if "%bat_count%" NEQ "0" (
rem Если строка поиска - не пустая
if -%search_string% NEQ - (
rem Если строка найдена, запись
rem найденных строк во временный
rem файл и вывод найденных строк с
rem помощью команды edit, иначе
rem сообщение о том, что строка
rem в файле не найдена
for %%f in (*.bat) do
find %%f "%search_string%" >
temp$$$$.txt &&
(echo Вывод строк файла %%f &
edit temp$$$$.txt &
erase temp$$$$.txt) ||
echo Файл %%f: нет строки поиска
) else (
rem Вывод содержимого файлов
rem с помощью команды edit
for %%f in (*.bat) do
echo Вывод файла %%f & edit %%f
)
rem Вывод количества текстовых файлов
echoКомандных файлов в папке'%CD%':
%bat_сount%
) else (
rem Вывод сообщения об отсутствии
rem текстовых файлов
echoВ папке%CD%нет командных файлов
)
)
Далее выполняется проверка существования временного файла и его удаление:
rem Если временный файл существует
if exist temp$$$$.txt (
rem Удаление временного файла
erase temp$$$$.txt
)
И, наконец, последние команды файла восстанавливают текущую папку и отменяют локальный режим для переменных окружения:
:dir_restore
rem Если каталог - не текущий каталог
if %1 NEQ . (
rem Восстановление текущего каталога
popd
)
:exit
rem Отмена локального режима изменений
rem переменных окружения
endlocal
Пример вызова и вывода этого командного файла:
D:\Командные файлы>viewer.bat .
******************************************
* Просмотр текстовых и командных файлов *
******************************************
Введите строку поиска или пустую строку:
var2
Вывод строк файлаdircontANSI.txt
Вывод строк файлаdircontUTF-16.txt
Вывод строк файлаdircont.txt
Файлdir2.txt:нет строки поиска
Файлdir1.txt:нет строки поиска
Текстовых файлов в папке'D:\Командные файлы': 5
Вывод строк файла test.bat
Файлtestset.bat:нет строки поиска
Файлtestecho.bat:нет строки поиска
Файлviewer.bat:нет строки поиска
Командных файлов в папке'D:\Командные файлы': 4