Команды setlocal и endlocal
Команда setlocal устанавливает режим при котором все операции над переменными окружения, строковыми или числовыми данными выполняются в локальной области данного командного файла. Этот режим действует, пока в командном файле не встретится команда endlocal, отменяющая локальный режим, либо пока не будет достигнут конец командного файла. В этом случае, если в командном файле было изменено значение какой-либо переменной окружения, то после окончания выполнения файла будет действительным старое значение переменной. Если же в командном файле определены новые переменные окружения, то после выполнения командного файла они будут удалены.
Команда call
В командном файле можно вызвать другой командный файл, просто указав его имя (и, если надо, параметры). Но после окончания работы вызванного файла выполнение исходного командного файла продолжено не будет. Поэтому если требуется из одного командного файла вызвать выполнение другого командного файла, а затем продолжить выполнение исходного командного файла, то это можно сделать командой вызова call, имеющей следующий формат:
call имя-командного-файла параметры
Команда start
Команда start запускает программу или команду в отдельном окне и имеет следующий синтаксис:
start ["заголовок"] [/dпуть] [/i] [/min] [/max] [{/separate | /shared}]
[{/low | /normal | /high | /realtime | /abovenormal | belownormal}]
[/wait] [/b] [имя-файла] [параметры]
Параметр "заголовок" задает текст в строке заголовка открывающегося окна. Параметр имя-файла задает имя запускаемой команды или программы с заданными параметрами. Если параметр имя-файла не задан, просто открывается новой окно командной строки.
Для команды start определены следующие опции:
· /dпуть указывает папку запуска команды или программы;
· /i – передает начальные установки среды интерпретатора cmd.exe в новое окно командной строки;
· /min и /max – запускает новое окно командной строки соответственно в свернутом и развернутом виде;
· /separate и /shared – запускает 16-битные программы соответственно в отдельном или общем пространстве памяти;
· /low, /normal, /high, /realtime, /abovenormal и belownormal – запускает приложение соответственно с низким приоритетом, с нормальным приоритетом, с высоким приоритетом, с приоритетом реального времени, с приоритетом выше среднего и с приоритетом ниже среднего;
· /wait – запускает приложение с ожиданием окончания его работы;
· /b – запускает приложение без открытия нового окна командной строки (обработка комбинации клавиш Ctrl+C не производится, пока приложение не разрешит обработку Ctrl+C, а для прерывания приложения следует использовать Ctrl+Break).
Команда start без параметров просто открывает новое окно командной строки.
Команда cmd
Команда cmd запускает новую копию интерпретатора команд и имеет следующий синтаксис:
cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}]
[/t:тф] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] команда]
Для команды cmd определены следующие опции:
· /c и /k – выполнение команды, заданной параметром команда, соответственно с завершением и продолжением работы
· /s – изменение обработки команды после параметров /c или /k;
· /q – выключение режима вывода команд на экран;
· /d – отключение выполнения команд AutoRun;
· /a и /u – вывод сведений соответственно в формате ANSI или в кодировке Unicode;
· /t:фт – изменение цвета текста т и фона ф (см. 2.1.14.2.4);
· /e:on и /e:off – включение или отключение расширений командного процессора;
· /f:on и /f:off – включение или отключение завершения имен файлов и папок;
· /v:on и /v:off – включение или отключение отложенного расширения переменных среды.
Команда pause
Команда паузы pause позволяет приостановить выполнение командного файла (например, для того, чтобы можно было поставить нужную дискету). При выполнении этой команды на экран выводится сообщение:
Для продолжения нажмите любую клавишу . . .
Выполнение командного файла при этом приостанавливается. Если нажать любую алфавитно-цифровую клавишу, Пробел или Enter, выполнение командного файла будет продолжено.
Последовательности команд
В одной командной строке могут быть заданы несколько команд, т.е. последовательность команд. Команды в последовательности задаются следующим образом:
· команда-1 & команда-2 – команда-2 выполняется после команды-1;
· команда-1 && команда-2 – команда-2 выполняется после команды-1 только в том случае, если команда-1 завершилась успешно (с нулевым кодом);
· команда-1 || команда-2 – команда-2 выполняется после команды-1 только в том случае, если команда-1 завершилась с ошибкой (с ненулевым кодом);
· (команда-1 & команда-2) – объединение команды-1 и команды-2 в группу.
Пример командного файла
Командный файл 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
5. Порядок выполнения работы (занятие 2)
1. Составьте командный файл в соответствии со своим вариантом:
2. Откройте свою папку и создайте в ней папку temp.
3. Скопируйте в папку temp несколько файлов с нужными при выполнении вашего варианта расширениями (например, .txt, .doc, .exe и т.д.).
4. Создайте (с помощью команды copy con имя-файла) файл со своим именем и расширением .bat.
5. Текстовый файл должен быть в кодировке OEM (DOS). Его можно редактировать либо во встроенном редакторе Far (в режиме DOS), либо в текстовом редакторе Блокнот (со шрифтом Terminal), либо в редакторе Bred3 (в кодировке OEM).
6. Для всех вариантов при значении /? для первого параметра должна выводиться справка о командном файле: действие, вызов и пояснения к параметрам.
7. Для всех вариантов в командном файле должна выполняться проверка параметров:
· если параметр является обязательным, производится проверка его задания;
· если параметр – файл или папка, выполняется проверка их существования;
· если параметр может иметь только определенное значение или значения, выполняется проверка каждого значения и, если параметр имеет недопустимое значение, должно выводиться сообщение об ошибке.
8. Последующие действия выполняются в соответствии с вашим вариантом.
9. Создайте новый файл в текстовом редакторе Блокнот для записи результатов работы командного файла.
10. После создания командного файла проверьте его работу при всех возможных значениях параметров и скопируйте результаты выполнения с экрана системного приложения Командная строка или командной оболочки Far в окно текстового редактора.
11. Покажите преподавателю работу вашего командного файла для всех возможных значений параметров.
12. Сохраните файл, содержащий командный файл, и файл, содержащий результаты работы командного файла, на дискету или флэш-карту, а затем удалите папку temp.
Вариант 5-01
Создайте командный файл вывода имен и характеристик файлов (с помощью команды dir) заданных типов или с заданным именем из заданной папки.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· prog – для программных файлов (с расширениями .com и .exe);
· bat – для командных файлов (с расширением .bat);
· text – для текстовых файлов (с расширениями .doc и .txt);
· all – для всех файлов.
Если второй параметр не задан, выдается запрос на ввод имени файла, для которого будут выводиться характеристики (в имени файла можно использовать символы * и ?).
Для значений параметров prog, bat или text должно быть выведено общее количество файлов соответствующего типа в папке (программных, командных или текстовых).
Вариант 5-02
Создайте командный файл, выводящий оглавление папки (полученное с помощью команды dir) на экран дисплея, в заданный файл или на печать.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является вид выводного потока:
· d – вывод на дисплей;
· f – вывод в заданный в качестве третьего параметра файл в папке, заданной в первом параметре;
· p – вывод на печать.
Если второй параметр не задан, для него предполагается значение d.
Если значение второго параметра равно f, выдается запрос на ввод имени файла, в который будет выводиться оглавление папки.
Вариант 5-03
Создайте командный файл копирования файлов заданного типа (с помощью команды copy) из одной папки в другую.
В качестве первого (обязательного) параметра должно быть задано имя исходной папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· image – для файлов изображений (с расширениями .bmp , .gif, .jpg и .png);
· prog – для программных файлов (с расширениями .com и .exe);
· text – для текстовых файлов (с расширениями .doc и .txt);
· all – для всех файлов.
Если второй параметр не задан, для него предполагается значение all.
В командном файле выдается запрос на ввод имени папки, в которую будут копироваться файлы (для текущей папки задается символ "."). Имена исходной папки и папки, в которую будет производиться копирование, не должны совпадать. Если папка с заданным именем не существует, она создается с помощью команды mkdir.
Для значений параметров image, prog или text должно быть выведено общее количество скопированных файлов соответствующего типа (изображений, программных или текстовых).
Вариант 5-04
Создайте командный файл, выводящий характеристики файлов заданного типа в заданной папке, либо в родительской папке заданной папки, либо в одной из дочерних папок заданной папки.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· image – для файлов изображений (с расширениями .bmp , .gif, .jpg и .png);
· doc – для файлов Word (с расширением .doc);
· text – для текстовых файлов (с расширением .txt);
· prog – для программных файлов и командных файлов (с расширениями .com , .bat и .exe).
Если второй параметр не задан, выводятся характеристики всех файлов.
Если в папке есть дочерние папки, выводится список этих папок (с помощью команды dir /a:d /b), иначе выводится сообщение «В папке имя-папки нет папок». После этого выводится запрос на ввод папки, для которой будут выводиться характеристики файлов. В качестве ответа на запрос можно задать либо имя одной из дочерних папок, либо символ "." (для вывода характеристик файлов в заданной папке), либо символы ".." (для вывода характеристик файлов в родительской папке заданной папки). Если в ответ на запрос введена пустая строка, выполнение файла прекращается.
Вариант 5-05
Создайте командный файл, выполняющий вывод списка временных файлов с заданным расширением файла в папке с именем имя-папки, а также может удалять временные файлы с заданным именем.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является расширение файла:
· bak – для временных файлов с расширением .bak;
· tmp – для временных файлов с расширением .tmp.
Если второй параметр не задан, выводится список всех временных файлов (с расширениями .bak и .tmp).
Если временные файлы в папке не найдены, выполнение командного файла заканчивается и выдается сообщение «В папке имя-папки нет временных файлов», в противном случае выдается список временных файлов (с помощью цепочки команд dir и findstr) и количество временных файлов в папке заданного типа в папке или общее количество временных файлов.
После вывода списка выдается запрос на возможность удаления временного файла или файлов. Если ответ на запрос n, выполнение командного файла заканчивается. Если ответ y, выводится запрос на ввод имени удаляемого файла (без расширения). Если для значения второго параметра bak существует файл с заданным именем и расширением .bak, он удаляется. Аналогично для значения второго параметра tmp удаляется файл с заданным именем и расширением .tmp. Если второй параметр не задан, удаляется файл с заданным именем и расширением .bak и/или .tmp.
Если задано удаление временных файлов, то после его окончания должно быть выведено сообщение «Удален файл/файлы с именем имя-файла».
Вариант 5-06
Создайте командный файл, выполняющий проверку наличия файлов с заданным расширением (например, doc или txt) в заданной папке с помощью условия exist в команде if.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является опция /erase. Если она задана, файлы с заданным расширением (если они есть) удаляются из папки.
В начале выполнения выдается запрос на ввод расширения файла (без первого символа ".").
Если файлы с заданным расширением в папке не найдены, выполнение командного файла заканчивается и выдается сообщение «В папке имя-папки нет файлов с расширением расширение», в противном случае выдается список файлов с заданным расширением (с помощью цепочки команд dir и findstr), а также общее количество файлов в папке с заданным расширением. Если задано удаление файлов с заданным расширением, то после его окончания должно быть выведено сообщение «Файлы с расширением расширение в папке имя-папки удалены».
Вариант 5-07
Создайте командный файл, выполняющий проверку наличия файла с заданным именем (например, a1) в заданной папке с помощью условия exist в команде if и определение типа файла.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является опция /chars. Если она задана, на экран выводятся характеристики файла.
В начале выполнения выдается запрос на ввод имени файла (без последнего символа "." и расширения).
Если файл с заданным именем в папке не найден, выполнение командного файла заканчивается и выдается сообщение «В папке имя-папки нет файла с именем имя-файла», в противном случае выдается «Файл с именем имя-файла: имя-типа», где имя-типа может иметь одно из следующих значений:
· программа – для файлов с расширением .com или .exe;
· командный файл – для файлов с расширением .bat;
· изображение – для файлов с расширениями .bmp , .gif, .jpg или .png;
· текстовый – для файлов с расширениями .txt или .doc);
· тип неизвестен – для файлов с остальными расширениями.
Вывод характеристик файла выполняется с помощью цепочки команд dir и findstr. Предполагается, что в папке есть только один файл с заданным именем.
Вариант 5-08
Создайте командный файл, выводящий количество строк в файлах, содержащие заданные строки поиска (с помощью команды find с параметром /c) для текстовых файлов заданного типа в заданной папке. Файлы в папке просматриваются с помощью команды for.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· text – для текстовых файлов (с расширением .txt);
· bat – для командных файлов (с расширением .bat);
· all – для всех текстовых файлов (с расширениями .txt и.bat).
Если второй параметр не задан, выдается запрос на ввод имени файла (в имени файла могут быть использованы символы "?" и "*") и запрос на ввод расширения файла (должно быть одно из перечисленных выше расширений).
Строка поиска в файлах задается с помощью запроса.
Если файлов указанного типа нет в папке, выводится сообщение «В папке имя-папки нет файлов типа имя-типа».
Если заданная подстрока не найдена в файле, выдается сообщение «В файле имя-файла нет строк, содержащих строку "подстрока-поиска"», в противном случае выдается количество строк, содержащих строку поиска.
Для значения параметра text в конце должно быть выведено общее количество текстовых файлов в папке, для значения параметра bat – общее количество командных файлов в папке, а для значения параметра all – общее количество текстовых и командных файлов в папке.
Вариант 5-09
Создайте командный файл, выполняющий просмотр файлов папки в соответствии с их типом.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла, который может иметь одно из следующих значений:
· image – для файлов изображений с расширениями .bmp, .gif, .jpg или .png (вызывается программа C:\WINDOWS\system32\mspaint.exe);
· bat – для командных файлов с расширением .bat (вызывается команда edit);
· text – для текстовых файлов с расширением .txt (вызывается программа C:\WINDOWS\Notepad.exe).
Если второй параметр не задан, выдается запрос на ввод имени файла (в имени файла могут быть использованы символы "?" и "*") и запрос на ввод расширения файла (должно быть одно из перечисленных выше расширений).
Для значения параметра image в конце должно быть выведено общее количество файлов изображений в папке, для значения параметра bat в конце должно быть выведено общее количество командных файлов в папке, для значения параметра text – общее количество текстовых файлов в папке, а для значения параметра all – общее количество файлов изображений, текстовых и командных файлов в папке.
Вариант 5-10
Создайте командный файл, выводящий содержимое текстовых файлов, содержащих заданное с помощью команды findstr слово (без различия верхнего и нижнего регистров), для текстовых файлов заданного типа в заданной папке. Файлы в папке просматриваются с помощью команды for.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· text – для текстовых файлов (с расширением .txt);
· bat – для командных файлов (с расширением .bat);
· all – для всех текстовых файлов (с расширениями .txt и.bat).
Если второй параметр не задан, выдается запрос на ввод имени файла (в имени файла могут быть использованы символы "?" и "*") и запрос на ввод расширения файла (должно быть одно из перечисленных выше расширений).
Слово поиска задается с помощью запроса.
Для вывода содержимого текстовых файлов вызывается программа C:\WINDOWS\Notepad.exe, а для вывода содержимого командных файлов – команда edit.
Для значения параметра text в конце должно быть выведено общее количество текстовых файлов в папке, для значения параметра bat – общее количество командных файлов в папке, а для значения параметра all – общее количество текстовых и командных файлов в папке.
Если заданной строки поиска нет в файле, выводится сообщение «Строка поиска не найдена в файле имя-файла», иначе выводится строка «Вывод содержимого файла имя-файла».
Вариант 5-11
Создайте командный файл, выводящий имена файлов заданного типа в заданной папке.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является порядок сортировки вывода имен файлов: /asc – для сортировки по возрастанию и /desc – для сортировки по убыванию. Если второй параметр не задан, сортировка не производится.
В начале выполнения файла в цикле (с использованием команды for с опцией /L) задаются запросы на ввод расширений файлов (до пяти расширений). Можно ввести меньше расширений, задав для значения расширения пустую строку.
Имена файлов в папке выводятся с помощью команды dir /B. При наличии второго параметра имена файлов перед выводом сортируются. После вывода имен файлов выводится также общее количество файлов заданного типа в папке.
Если файлов указанного типа нет в папке, выводится сообщение «В папке нет файлов типа имя-типа».
Вариант 5-12
Создайте командный файл, выполняющий переименование файлов заданного типа.
В качестве первого (обязательного) параметра должно быть задано имя папки, с которой начинается просмотр (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· text – для текстовых файлов (с расширением .txt);
· prog – для командных файлов (с расширением .bat);
· all – для всех файлов папки.
Если второй параметр не задан, выдается запрос на ввод имени файла (в имени файла могут быть использованы символы "?" и "*") и запрос на ввод расширения файла (должно быть одно из перечисленных выше расширений).
После этого определяется и выводится (в зависимости от значения второго параметра) количество файлов заданного типа или всех файлов в папке.
Затем (с использованием команды for с опцией /L) в цикле выводятся имена файлов (от 1 до количества файлов) и задаются запросы на новое имя файла (без расширения, которое не меняется). Если введена непустая строка, имя файла изменяется на новое имя (с помощью команды ren) и выводится сообщение об изменении файла, в противном случае имя файла не меняется и также выводится соответствующее сообщение.
Если файлов указанного типа нет в папке, выводится сообщение «В папке нет файлов типа имя-типа».
Вариант 5-13
Создайте командный файл, выводящий строки файлов, содержащих заданные подстроки (с помощью команды find) в заданный файл для файлов заданного типа в заданной папке. Файлы в папке просматриваются с помощью команды for.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является тип файла:
· text – для текстовых файлов (с расширением .txt);
· bat – для командных файлов (с расширением .bat);
· all – для всех файлов заданной папки.
Если второй параметр не задан, выдается запрос на ввод имени файла (в имени файла могут быть использованы символы "?" и "*") и запрос на ввод расширения файла (должно быть одно из перечисленных выше расширений).
В начале выполнения файла в цикле (с использованием команды for с опцией /L) задаются запросы на ввод строк поиска (до пяти строк). Можно ввести меньше строк поиска, задав для значения строки пустую строку.
Если файлов указанного типа нет в папке, выводится сообщение «В папке нет файлов типа имя-типа».
Если в файле найдены строки, в которых содержится хотя бы одна из заданных строк поиска, выводится имя файла и найденные строки с их номерами. Если строки не найдены, выводится сообщение о том, что в файле не обнаружено строк поиска.
Для значения параметра text в конце должно быть выведено общее количество текстовых файлов в папке, для значения параметра bat – общее количество командных файлов в папке, а для значения параметра all – общее количество файлов в папке.
Вариант 5-14
Создайте командный файл, выводящий строки файлов, содержащих (или не содержащих) две заданные подстроки (с помощью команды find) для заданного файла или файлов в заданной папке. Файлы в папке просматриваются с помощью команды for.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является опция критерия поиска:
· /yy – выводятся строки, в которых есть и первая и вторая подстроки поиска;
· /yn – выводятся строки, в которых есть первая подстрока поиска, но нет второй подстроки поиска;
· /ny – выводятся строки, в которых нет первой подстроки поиска, но есть вторая подстрока поиска;
· /nn – выводятся строки, в которых нет ни первой, ни второй подстроки поиска.
Если параметр не указан, предполагается значение /yy.
В качестве третьего (необязательного) параметра может быть задано имя файла, в котором будет выполняться поиск (в имени файла могут быть заданы символы "*" и/или "?". Если имя файла не задано, поиск выполняется во всей папке.
В начале выполнения файла выдается запрос на ввод первой подстроки поиска (непустой строки) и второй подстроки поиска (непустой строки).
После вывода строк должно быть выведено общее количество просмотренных файлов в папке (это либо общее количество файлов в папке, либо количество файлов, заданных в пятом параметре).
Примечание: строки, не содержащие заданную подстроку, определяются с помощью команды find с опцией /v.
Вариант 5-15
Создайте командный файл, удаляющий файлы с заданным расширением.
В качестве первого (обязательного) параметра должно быть задано имя папки (для текущей папки задается символ "."). Вторым (необязательным) параметром является опция /chars. Если второй параметр задан, выводятся имена и характеристики файлов, в противном случае – только имена файлов.
В начале выполнения командного файла выдается запрос на ввод расширения. После этого определяется количество файлов с заданным расширением.
После этого в цикле (с использованием команды for) выводятся имена и/или характеристики файлов (в зависимости от наличия второго параметра) с заданным расширением и выдается запрос на удаление файла: «Удалить файл: введите yes или no». Если ответ yes, файл удаляется, если no – сохраняется. Если ответ другой (не yes и не no), запрос повторяется.
Если файлов с заданным расширением нет в папке, выводится сообщение «В папке нет файлов с расширением имя-расширения».
Содержание отчета
В отчете должны быть представлены следующие разделы:
1. Текст созданного командного файла.
2. Пример вывода командного файла (если какой-либо параметр имеет несколько допустимых значений, для каждого значения этого параметра).
3. Файл или файлы вывода команды (если вывод команды выполняется в файл).
4. Вывод справки команды (для значения параметра /?).
5. Вывод команды в случаях, когда не задан каждый обязательный параметр.
6. Вывод команды, если не существует файл или каталог.
7. Вывод команды для недопустимого значения параметра.
Вопросы для самоконтроля
1. Как задаются командные файлы в Windows и как задаются параметры при их вызове?
2. Как интерпретируются параметры внутри командных файлов в Windows? Какие модификаторы можно задать для параметров командных файлов?
3. Какие основные команды используются в командных файлах Windows? Дайте краткое описание каждой команды.
4. Как выполняется управление выводом на экран команд в командном файле и как вывести сообщение в командном файле Windows? Для каких целей используется префикс "@" в строках командного файла Windows?
5. Какие функции выполняют команды cls, rem и color в командных файлах Windows?
6. Какие работают команды pushd и popd в командных файлах Windows? Как задается безусловный переход и метка в командных файлах Windows?
7. Как задается и как выполняется расширенное сравнение двух строк в команде if в командных файлах Windows?
8. Как задается и как выполняется проверка кода завершения и существования файла в команде if в командных файлах Windows?
9. Как задается и как выполняется проверка версии командного процессора и существования переменной в команде if в командных файлах Windows?
10. Как задается и как выполняется команда find в командных файлах Windows?
11. Как задается и как выполняется команда findstr в командных файлах Windows?
12. Какие метасимволы можно задать в команде findstr в командных файлах Windows?
13. Как задается и как выполняется команда sort в командных файлах Windows?
14. Как задается и как выполняется основная форма команды for и форма с опцией /D в командных файлах Windows?
15. Как задается и как выполняется формы команды for с опциями /R и /L в командных файлах Windows?
16. Как задается и как выполняется формы команды for с опцией /F в командных файлах Windows?
17. Как выполняются операции добавления, изменения, просмотра и удаления переменных окружения с использованием команды set в командных файлах Windows?
18. Какие основные системные переменные можно использовать в команде set в командных файлах Windows?
19. Как с помощью команды set задается ввод данных с клавиатуры в командных файлах Windows?
20. Как с помощью команды set задаются и выполняются операции над числовыми выражениями в командных файлах Windows?
21. Для каких целей используются команды setlocal и endlocal в командном файле?
22. Как задаются и как выполняются команды call и pause в командных файлах Windows?
23. Как задается и как выполняется команда start в командных файлах Windows?
24. Как задается и как выполняется команда cmd в командных файлах Windows?
25. Как задаются и как выполняются последовательности команд в командных файлах Windows?