Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Удалить директорию bat-файлом  (Прочитано 24920 раз)
0 Пользователей и 1 Гость смотрят эту тему.
fredi5
Участник

ru
Offline Offline
Пол: Мужской

« : 02-01-2009 14:06 » 

Возникла необходимость, после закрытия программы, удалить все лишнее.
По закрытию формы запускается bat-файл (prog.bat), который должен удалить
файл программы, директорию, в которой находится файл программы и себя.
На деле удаляется все кроме директории. Полазил по форумам, нашел список
команд bat-файла, но про удаление директорий там ничего нет.

 Файл prog.bat находится на диске Е.
Код:
echo off 
:Repeat
del "e:\NewDir\table.exe"
if exist "table.exe" goto Repeat
rmdir "e:\NewDir"
del "\prog.bat"
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 02-01-2009 14:16 » 

А при чем тут Delphi? Ты не сможеш удалить файл, который открыт на исполнение. Система не даст.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
fredi5
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 02-01-2009 14:56 » 

При закрытии Delphi программы (закрытии формы) по событию OnClose запускается, заранее созданный
bat-файл. После запуска bat-файла Delphi-программа (table.exe) закрывается четко. После этого
bat-файл спокойно удаляет закрытую Delphi-программу и себя. А вот директорию удалять не хочет.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 02-01-2009 15:00 » 

Код:
rmdir "e:\NewDir"
del "\prog.bat"
А он и не сможет удалить директорию Улыбаюсь Она же не пустая. Там находится prog.bat. А вот если ты запишеш наоборот, то тогда и сам файл не будет удаляться.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 02-01-2009 15:06 » 

можно сделать что то типа этого заместо этих строчек
Код:
echo "del  e:\NewDir\prog.bat"> e:\temp.bat
echo "rmdir e:\NewDir">> e:\temp.bat
echo "del e:\temp.bat" >> e:\temp.bat
call e:\temp.bat
Код не проверял, так что тебе придется его самому настроить и довести до ума.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
fredi5
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 02-01-2009 15:54 » 

Я не зря указывал, что bat-файл находится на диске Е ( в корневой директории).
Код:
rmdir "e:\NewDir"
del "\prog.bat"
Здесь должна удалиться указанная директория. А сам bat-файл, находясь
в корневой директории диска Е, должен тоже удалиться, т.к. в ( del "\prog.bat" ) не указана
директория расположения bat-файла. А раз она не указана - программа ищет файл в той-же
директории, где находится сама. Кстати, bat-файл успешно себя удаляет. Может, после удаления
exe-файла операционная система не сообщает куда-то об очистке директории ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 03-01-2009 06:13 » 

Если у тебя текушая директория e:\, то эта строчка
Код:
if exist "table.exe" goto Repeat
неверна и может привети в определенных услових к вечному циклу. И она кстати меня натолкнула на мысль, что текушая у тебя e:\NewDir. Ну это ладно.
Насчет предположения, о не сообшении куда надо. Полностью не верно. Скорее всего, у тебя прав доступа в скрипте нет. Попробуй сам вручную удалить директорию через консоль. И посмотри, на что будет жаловаться. Скорее всего, на то, что у тебя директория не пустая. Если ты заходил в нее через Exploer, то скорее всего там есть еше один скрытый файл Thumbs.db.
« Последнее редактирование: 03-01-2009 06:28 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
fredi5
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 03-01-2009 14:56 » 

Пришлось вытащить из кладовки старый учебник по DOS.
Файл (table.exe) запускается и закрывается в директории ( newnew ).
Для ОС эта директория является текущей, а команда ( rmDir ) не
удаляет текущие директории. Выход в смене текущей директории на корневую
(в которой находится bat-файл) командой CD\. На счет цикла - все подтвердилось.
Код:
Echo off
del "e:\newnew\project2.exe"
CD\.
rmDir "e:\newnew"
del "\zakr.bat"
Все прекрасно заработало.
Записан
fredi5
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 03-01-2009 15:03 » 

Отправил не тот код. Но смысл не меняется. Просто exe и bat файлы именуются иначе.
Код:
Echo off
del "e:\newnew\table.exe"
CD\.
rmDir "e:\newnew"
del "\prog.bat"
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 07-01-2009 22:20 » 

Глянул на тему т-ко сейчас.
Система не может удалить текущий (открытый) каталог (папку, директорию - кому что больше нравится).
Строка "CD\." - меняет дело, происходит перевод текущего каталога ближе к корню.
А для программ (и не только на Delphi) обычное дело - делать текущим каталог запуска. Если глянуть на ярлык программы, там есть строка "Рабочий каталог" - это он и есть.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines