- •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. Литература
Листинг 4. Отображение и установка системного времени
3.4. Команда mkdir
Данная команда создает каталог, даже если промежуточные каталоги не существуют, система автоматически производит постройку маршрута до создаваемо папки, так же введена возможность создание нескольких папок одновременно в текущем каталоге если они указаны через пробелы.
Алгоритм работы процедуры:
1. Если есть ключ справки выводим ее, возвращаемся на начало.
2. Извлекаем путь или названия папок из строки.
3. Проверяем есть ли установленные ключи.
4. В зависимости от ключей производим действия.
5. Создаем каталог/каталоги.
6. Возвращаемся на начало.
Далее представлен листинг процедуры создания каталога.
if UpperCase (rg.Match[0]) = 'MKDIR ' then
begin
rg.Expression := '\/\?';
rg.Exec(tl);
if rg.Match[0] = '/?' then
begin
MyWriteln('MKDIR [DISK:][PATH:]'
+#13#10+'Создает дирректории даже в том случае если нет промежуточных дирректорий');
goto g1;
end
else
begin
rg.Expression := '[A-Za-z][:][ \\A-Za-z0-9]*';
rg.Exec(tl);
if rg.Match[0] <> ''
then
begin
ForceDirectories(rg.Match[0]);
end
else
begin
rg.Expression := '[ ]+[ \\A-Za-z0-9]+';
rg.Exec(trimleft(tl));
if rg.Match[0] <> ''
then
begin
help := copy(curpath,1,length(curpath)-1);
if help[Length(help)] <> '\'
then help:=help+trimleft(rg.Match[0])
else
begin
if (rg.Match[0][2])<>'\'
then
begin
help := '';
for i := 2 to Length((rg.Match[0])) do
begin
if ((rg.Match[0][i]) = ' ') OR (i = Length((rg.Match[0])))
then
begin
if i = Length(rg.Match[0])
then help := help + rg.Match[0][i];
help:=copy(curpath,1,length(curpath)-2)+'\'+help;
ForceDirectories(help);
help := '';
end
else help := help + (rg.Match[0][i]);
end;
goto g1;
end
else help:=copy(help,1,length(help)-1)+trimleft(rg.Match[0]);
end;
ForceDirectories(help);
goto g1;
end;
end;
end;
goto g1;
end;
Листинг 5. Процедура mkdir
3.5. Команда rd
Данная команда производит удаление папки и всего что в ней находится,
в ней используется два ключа /Q и /S:
-Ключ /Q предназначен для для отключения подтверждения на удаление каталога и всего его содержимого при включенном /S, его можно не включать если вы не собираетесь включать подтверждение на удаление каталога;
-Ключ /S предназначен для включения подтверждения удаления каталога и всего его содержимого;
Алгоритм работы процедуры:
1. Если есть ключ справки выводим ее, возвращаемся на начало.
2. Извлекаем путь или названия папок из строки.
3. Проверяем есть ли такая папка.
4. В зависимости от ключей производим действия.
5. Удаляем каталог/каталоги.
6. Возвращаемся на начало.
Далее приведена процедура удаления каталога и всего содержимого с различными ключами:
if UpperCase (rg.Match[0]) = 'RD ' then
begin
rg.Expression := '\/\?';
rg.Exec(tl);
if rg.Match[0] = '/?' then
begin
MyWriteln('RD [DISK:][PATH:][/S][/Q]'
+#13#10+'/S выводит подтверждение на удалени каталогов'
+#13#10+'/Q отключает вывод подтверждения при включенном /S'
+#13#10+'Удаляет дирректории');
goto g1;
end
else
begin
rg.Expression := '[A-Za-z][:][ \\A-Za-z0-9]*';
rg.Exec(tl);
if rg.Match[0] <> ''
then
begin
if FindText_v1 (' /Q',UpperCase(tl))
then
begin
RemoveAll(trim(rg.Match[0]));
goto g1;
end
else
begin
if FindText_v1 (' /S',UpperCase(tl))
then
begin
MyWriteln('Вы действительно хотите удалить все входящие в этот'+#13#10+
' каталог файлы и папки Y/N');
Readln;
Readln(tl);
if Trim(UpperCase(tl)) = 'Y'
then
begin
RemoveAll(trim(rg.Match[0]));
MyWriteln('Для продолжения раоты нажмити <ENTER>');
goto g1;
end;
end
else
begin
RemoveAll(trim(rg.Match[0]));
goto g1;
end;
end;
end
else
begin
rg.Expression := '[ ]+[ \\A-Za-z0-9]+';
rg.Exec(trimleft(tl));
if rg.Match[0] <> ''
then
begin
help := copy(curpath,1,length(curpath)-1);
if help[Length(help)] <> '\'
then help:=help+trimleft(rg.Match[0])
else
begin
if (rg.Match[0][2])<>'\'
then
begin
help := '';
for i := 2 to Length((rg.Match[0])) do
begin
if ((rg.Match[0][i]) = ' ') OR (i = Length((rg.Match[0])))
then
begin
if i = Length(rg.Match[0])
then help := help + rg.Match[0][i];
help:=copy(curpath,1,length(curpath)-2)+'\'+help;
if FindText_v1 (' /Q',UpperCase(tl))
then
begin
RemoveAll(trim(help));
end
else
begin
if FindText_v1 (' /S',UpperCase(tl))
then
begin
MyWriteln('Вы действительно хотите удалить все входящие в этот'+#13#10+
' каталог файлы и папки Y/N');
Readln;
Readln(tl);
if Trim(UpperCase(tl)) = 'Y'
then
begin
RemoveAll(trim(help));
MyWriteln('Для продолжения раоты нажмити <ENTER>');
end;
end
else
begin
RemoveAll(trim(help));
end;
end;
help := '';
end
else help := help + (rg.Match[0][i]);
end;
goto g1;
end
else help:=copy(help,1,length(help)-1)+trimleft(rg.Match[0]);
end;
if FindText_v1 (' /Q',UpperCase(tl))
then
begin
RemoveAll(trim(help));
goto g1;
end
else
begin
if FindText_v1 (' /S',UpperCase(tl))
then
begin
MyWriteln('Вы действительно хотите удалить все входящие в этот'+#13#10+
' каталог файлы и папки Y/N');
Readln;
Readln(tl);
if Trim(UpperCase(tl)) = 'Y'
then
begin
RemoveAll(trim(help));
MyWriteln('Для продолжения раоты нажмити <ENTER>');
goto g1;
end;
end
else
begin
RemoveAll(trim(help));
goto g1;
end;
end;
goto g1;
end;
end;
end;
goto g1;
end;