Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1-04.doc
Скачиваний:
43
Добавлен:
12.05.2015
Размер:
260.1 Кб
Скачать

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%':

%batount%

) 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]