Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obrazets.doc
Скачиваний:
21
Добавлен:
10.06.2015
Размер:
3.99 Mб
Скачать

Листинг 6. Процедура rd

3.6. Команда cd

Данная команда позволяет сменить текущий каталог.

1. Если есть ключ справки выводим ее, возвращаемся на начало.

2. Извлекаем путь или названия папок из строки.

3. Меняем текущий каталог

4. Возвращаемся на начало.

Далее представлен листинг процедуры смены каталога:

if UpperCase (rg.Match[0]) = 'CD ' then

begin

rg.Expression := '\/\?';

rg.Exec(tl);

if rg.Match[0] = '/?' then

begin

MyWriteln('CD [DISK:][PATH]'

+#13#10+'Смена дирректории');

end

else

begin

if Length(Trim(tl)) = Length(Trim('CD')) then

begin

MyWriteln('Не указан каталог для смены');

goto g1;

end;

rg.Expression := '[A-Za-z][:][\\A-Za-z0-9]*';

rg.Exec(tl);

if rg.Match[0] <> ''

then

begin

if DirectoryExists(rg.Match[0])

then

begin

if rg.Match[0][Length(rg.Match[0])] <> '\'

then curpath := rg.Match[0]+'\>'

else curpath := rg.Match[0]+'>';

end

else

begin

MyWriteln('Данного каталога не существует, неправильно указан путь');

goto g1;

end;

goto g1;

end

else

begin

rg.Expression := '[ ]+[ \\A-Za-z0-9]+';

rg.Exec(trimleft(tl));

if rg.Match[0] <> ''

then

begin

help := '';

if rg.Match[0][Length(rg.Match[0])] <> '\'

then help := Copy(curpath,1,length(curpath)-1)+trimleft(rg.Match[0])

else help := Copy(curpath,1,length(curpath)-2)+trimleft(rg.Match[0]);

if DirectoryExists(help)

then

begin

if help[Length(help)] <> '\'

then curpath := help+'\>'

else curpath := help+'>';

end

else

begin

MyWriteln('Данного каталога не существует, неправильно указан путь');

goto g1;

end;

end

else

begin

if FindText_v1(' \[\.\.\]',tl)

then

begin

help := '';

if Length(curpath) = 4

then

begin

MyWriteln('Нельзя перейти на уровень выше от текущего корня');

goto g1;

end;

for i := Length (Copy(curpath,1,Length(curpath)-2)) downto 1 do

begin

if Copy(curpath,1,Length(curpath)-2)[i] = '\'

then

begin

help:= String_Reverse(help+Copy(curpath,1,Length(curpath)-2)[i]);

curpath:= StringReplace(curpath,help,'',[rfReplaceAll]);

goto g1;

end

else

begin

help := help + Copy(curpath,1,Length(curpath)-2)[i];

end;

end;

end;

end;

goto g1;

end;

end;

goto g1;

end;

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