- •1. Цель курсовой работы
- •2. Командный процессор ос ms Windows cmd
- •2.1. Оболочка (интерпретатор) командной строки command.Com/cmd.Exe
- •Листинг 1. Процедура инициализации
- •2.3. Структура команд. Параметры и ключи. Вывод справочной информации
- •2.4. Команды
- •2.4.4. Команды Date и Time
- •2.4.7.2. Команда cd
- •2.4.7.3. Команда dir
- •2.4.7.4. Команды mkdir
- •2.4.7.5. Команда del или erase
- •3. Назначение ключей и параметров, описание команд
- •3.1. Команда type
- •Листинг 2. Процедура type
- •3.2. Команда time
- •Листинг 3. Процедура отображения и установки времени
- •3.3. Команда date
- •Листинг 4. Отображение и установка системного времени
- •3.4. Команда mkdir
- •Листинг 5. Процедура mkdir
- •3.5. Команда rd
- •Листинг 6. Процедура rd
- •3.6. Команда cd
- •3.7. Команда attrib
- •Листинг 7. ПроцедураAttrib
- •3.8. Команда cls
- •Листинг 8. Процедура cls
- •3.9. Команда sort
- •Листинг 9. Процедура sort
- •3.10. Команда echo
- •Листинг 10. Процедура echo
- •3.11. Команда del|erase
- •Листинг 11. Процедура del
- •3.12. Команда dir
- •Листинг 12. ПроцедураDir
- •3.13. Команда invertcolor
- •Листинг 13. Процедура invertcolor
- •3.14. Разбиение на лексемы, синтаксический анализ, регулярные выражения
- •Листинг 14. Проверка на соответстиве команд
- •3.15. Процедуры упорядочивания массива (сортировка)
- •3.17. Русификация вывода командного процессора
- •4. Примеры выполнения работы команд
- •4.1. Команда dir
- •4.2. Команда attrib
- •4.3. Команда date и time
- •4.4. Команда type и sort
- •4.5. Команда mkdir, rd, cd
- •4.7. Команда cls и echo
- •4.8. Команда del | erase
- •5. Литература
Листинг 9. Процедура sort
3.10. Команда echo
Предназначенная для отображения строки текста. Команда echo - выводит текст (выводит текст на стандартное устройство вывода):
if UpperCase(rg.Match[0]) = 'ECHO ' then
begin
rg.Expression := '\/\?';
rg.Exec(tl);
if rg.Match[0] = '/?' then
begin
MyWriteln('ECHO [SOOBSHENIE]'
+#13#10+'Задает отображение вывода, выводит сообщение');
goto g1;
end
else
begin
rg.Expression := ' OFF';
rg.Exec(UpperCase(tl));
if rg.Match[0] <> ''
then echo := False
else
begin
if length(Trim(tl)) > 4
then
begin
rg.Expression := ' ON';
rg.Exec(UpperCase(tl));
if rg.Match[0] = ''
then MyWriteln(Copy(TL,6,Length(TL)))
else
begin
MyWriteln('ECHO ON');
echo := True;
end;
end
else
begin
MyWriteln('ECHO ON');
echo := True;
end;
end;
end;
goto g1;
end;
Листинг 10. Процедура echo
3.11. Команда del|erase
Данные команды производят удаление фалов с различными ключами.
-/P предназначен для включения подтверждения перед удалением фалов;
-/F предназначен для включения принудительного удаления файлов с атрибутом только для чтения;
-/S предназначен для включения удаления файла из всех подкаталогов;
-/Q предназначен для игнорирования подтверждения удаления файлов;
Алгоритм команды представляет из себя следующие шаги:
1. Проверяем существует ли каталог, файл на диске и в подпапках;
2. Определяем тип объекта(файл, каталог);
3. В зависимости от типа объекта выполняем действия с объектом;
4. Если папка то удаляем все что расположено в ней в зависимости от установленных ключей;
5. Если файл то удаляем все файлы в подкаталогах в зависимости от установленных ключей;
6. Возвращаемся по метке в начало работы;
Далее приведена процедура для удаления файла, так как команды DEL и ERASE соответствуют друг другу я привожу одну из них:
if UpperCase (rg.Match[0]) = 'DEL ' then
begin
rg.Expression := '\/\?';
rg.Exec(tl);
if rg.Match[0] = '/?' then
begin
MyWriteln('DEL [DISK:][PATH:][FILE:]'
+#13#10+'Удаляет файл'
+#13#10+'/P'+'запрос перед каждым удалением файла'
+#13#10+'/F'+'принудительное удаление файло только для чтения'
+#13#10+'/S'+'удаление файлов из всех подкаталогов'
+#13#10+'/Q'+'отключение запроса на удаление файла'
+#13#10+'/A:R'+'удалять файлы с параметром только для чтения'
+#13#10+'/A:H'+'удалять файлы с параметром скрытый'
+#13#10+'/A:S'+'удалять файлы с параметром системный'
+#13#10+'/A:A'+'удалять файлы с параметром фрхивный');
goto g1;
end
else
begin
rg.Expression := '[A-Za-z][:][\\A-Za-z0-9]*[.A-Za-z0-9]*';
rg.Exec(tl);
if rg.Match[0] <> ''
then
begin
exist := 0;
help := trimleft(rg.Match[0]);
ExistsDelA(stringreplace(trim(help),'\'+GetFileNameWE(trim(help)),'\',[]),GetFileNameWE(trim(help)));
case exist of
0: begin
MyWriteln('Объект не существует');
end;
1: begin//папка
if pos(' /P',uppercase(tl)) <> 0
then
begin
if pos(' /Q',uppercase(tl)) <> 0
then
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(help,1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(help,0);
ForceDirectories(trim(help));
end;
goto g1;
end
else
begin
MyWriteln('Вы точно хотите удалить все папки и файлы? y/n');
Readln;
Readln(tl);
if trim(uppercase(tl)) = 'Y'
then
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(help,1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(help,0);
ForceDirectories(trim(help));
end;
goto g1;
end
else goto g1;
end;
end
else
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(help,1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(help,0);
ForceDirectories(trim(help));
end;
goto g1;
end;
end;
2: begin//ôàéë
podcur := tl;
if pos(' /P',uppercase(podcur)) <> 0
then
begin
if pos(' /Q',uppercase(podcur)) <> 0
then
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(tl)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end
else
begin
MyWriteln('Вы точно хотите удалить все папки и файлы? y/n');
Readln;
Readln(tl);
if trim(uppercase(tl)) = 'Y'
then
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end
else goto g1;
end;
end
else
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end;
end;
end;
goto g1;
end
else
begin
rg.Expression := '[ ]+[ \\A-Za-z0-9]+[.A-Za-z0-9]*';
rg.Exec(trimleft(tl));
if rg.Match[0] <> ''
then
begin
help := stringreplace(curpath,'>','',[rfReplaceAll]);
if help[Length(help)] <> '\'
then help :=help + rg.Match[0]
else
begin
if trimleft(rg.Match[0])[1] <> '\'
then help := help+ trimleft(rg.Match[0])
else help := copy(help,1,Length(help)-1) + trimleft(rg.Match[0])
end;
exist := 0;
ExistsDelA(stringreplace(trim(help),'\'+GetFileNameWE(trim(help)),'\',[]),GetFileNameWE(trim(help)));
case exist of
0: begin
MyWriteln('Объект не существует');
end;
1: begin
if pos(' /P',uppercase(tl)) <> 0
then
begin
if pos(' /Q',uppercase(tl)) <> 0
then
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(trim(help),1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(trim(help),0);
ForceDirectories(trim(help));
end;
goto g1;
end
else
begin
MyWriteln('Вы точно хотите удалить все папки и файлы? y/n');
Readln;
Readln(tl);
if trim(uppercase(tl)) = 'Y'
then
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(trim(help),1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(trim(help),0);
ForceDirectories(trim(help));
end;
goto g1;
end
else goto g1;
end;
end
else
begin
if pos(' /F',uppercase(tl)) <> 0
then
begin
RemoveAllRA(trim(help),1);
ForceDirectories(trim(help));
end
else
begin
RemoveAllRA(trim(help),0);
ForceDirectories(trim(help));
end;
goto g1;
end;
end;
2: begin
podcur := tl;
if pos(' /P',uppercase(podcur)) <> 0
then
begin
if pos(' /Q',uppercase(podcur)) <> 0
then
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(tl)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end
else
begin
MyWriteln('Вы точно хотите удалить все папки и файлы? y/n');
Readln;
Readln(tl);
if trim(uppercase(tl)) = 'Y'
then
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end
else goto g1;
end;
end
else
begin
if pos(' /F',uppercase(podcur)) <> 0
then
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),1,GetFileNameWE(help),0);
end
else
begin
if pos(' /S',uppercase(podcur)) <> 0
then RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),1)
else RemoveAllFRA(stringreplace(help,GetFileNameWE(help),'',[]),0,GetFileNameWE(help),0);
end;
goto g1;
end;
end;
end;
goto g1;
end
else
begin
rg.Expression := '[\[]{1}[\,\.A-Za-z0-9]*[\]]{1}';
rg.Exec(trimleft(tl));
if rg.Match[0]<>''
then
begin
end
else
begin
end;
goto g1;
end;
end;
end;
goto g1;
end;