Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› ? VBS "правильное" удаление
Посл.ответ Сообщение

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 08 сентября 2006 10:02
· Личное сообщение · #1

Заморочка такая- допустим есть VBS скрипт (упрощенный пример):

On Error Resume Next

Set FileSystemObject = CreateObject("scripting.filesystemobject")

FileSystemObject.DeleteFolder "g:\FOLDER1\*" , true



Смысл понятен- удаляет на диске G в папке FOLDER1 все вложенные папки.

Проблема в том, что при отказе в доступе к какой-либо папке в директории процесс останавливается и папки названия которых по алфавиту идут после "проблемной" не удаляются.
Как решить вопрос?




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 08 сентября 2006 11:43
· Личное сообщение · #2

Расскажи публике, зачем при использовании скрипта в ворде или экселе тебе надо удалять множество папок? Смахивает на очередной макровирус

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 08 сентября 2006 12:35
· Личное сообщение · #3

Вообще-то нужно для реализации функции самоочистки в субдир-х. Причем тут Ворд и Эксэль? Откуда ты вообще их взял?




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 08 сентября 2006 14:21
· Личное сообщение · #4

Потому как VBScript юзается в этих редакторах.
Попробуй поставить не Next а метку, которая после отработки перейдёт к след записи. А потом goto и метку перед самой функцией удаления.

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 08 сентября 2006 14:21
· Личное сообщение · #5

Или VBA

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 79.4 (постоянный)
Активность: 0.090
Статус: Участник

Создано: 09 сентября 2006 01:49
· Личное сообщение · #6

Вот процедура, которая удоляет без всяких ФСО...
Private Sub ClearDirectory(psDirName)
Dim sSubDir

If Len(psDirName) > 0 Then

If Right(psDirName, 1) <> "\" Then
psDirName = psDirName & "\"
End If
On Error Resume Next
Kill psDirName & "*.*"

DoEvents

sSubDir = Dir(psDirName, vbDirectory)

Do While Len(sSubDir) > 0
If sSubDir <> "." And _
sSubDir <> ".." Then
If (GetAttr(psDirName & sSubDir) And _
vbDirectory) = vbDirectory Then
ClearDirectory psDirName & _
sSubDir & "\"
RmDir psDirName & sSubDir

DoEvents
sSubDir = Dir(psDirName, vbDirectory)
Else
Kill psDirName & sSubDir
sSubDir = Dir
End If

Else
sSubDir = Dir
End If
Loop
End If

End Sub



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 09 сентября 2006 06:46 · Поправил: VOLKOFF
· Личное сообщение · #7

Rascal пишет:
Потому как VBScript юзается в этих редакторах

...в смысле?
Писать код удобней ИМХО в VBS отладчике , или ты другое имел в виду?

d1v0x пишет:
Вот процедура, которая удоляет без всяких ФСО...


Ну не то что бы ФСО меня напрягали... я за простоту, т.к. эта процедура лишь незначительная часть большого VBS скрипта.

Идеальным выходом было бы For Each Folder In применяемый для спец папок, но для обычных он не пашет...



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 09 сентября 2006 06:56
· Личное сообщение · #8

Забыл сказать - скрипт, ко всему прочему, не удаляет папки с русскими названиями.



Ранг: 16.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2006 04:51 · Поправил: alexas
· Личное сообщение · #9

VOLKOFF пишет:
Смысл понятен- удаляет на диске G в папке FOLDER1 все вложенные папки.


Используй вот такой вызов:

Call DelSubFoldersKrasivo("g:\FOLDER1")

Sub DelSubFoldersKrasivo (FolderPath)
Dim curF,subF
Set curF = FileSystemObject.GetFolder(FolderPath)
For Each subF In curF.SubFolders
On Error Resume Next
subF.Delete True
If Err Then
Err.Clear
DelSubFoldersKrasivo(subF.Path)
End If
Next
End Sub




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 10 сентября 2006 05:28 · Поправил: VOLKOFF
· Личное сообщение · #10

А ведь действительно Krasivo! То что надо!...как сам не догадался?!...




Ранг: 60.1 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 10 сентября 2006 11:00
· Личное сообщение · #11

VOLKOFF пишет:
Rascal пишет:
Потому как VBScript юзается в этих редакторах
...в смысле?

MS Word и Ёxel поддорживают внутренний язык программирования (VBS какраз) - можешь создать программу прям в Ворде или Ёкселе.

P.S.: Сорю, за флуд



Ранг: 16.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2006 11:59 · Поправил: alexas
· Личное сообщение · #12

Shidla пишет:
MS Word и Ёxel поддорживают внутренний язык программирования (VBS какраз)


Не могу больше эту ерунду читать на страницах столь уважаемого мною форума . В приложениях MSOffice встроен VBA, а не VBScript, что совсем не одно и то же, хотя и используют они почти аналогичный синтаксис.

PS VBA = Visual Basic for Application; VBScript = Visual Basic Scripting Edition

Rascal пишет:
Попробуй поставить не Next а метку, которая после отработки перейдёт к след записи. А потом goto и метку перед самой функцией удаления.

VBScript не поддерживает меток и оператора Goto (кроме On Error Goto 0) и это одно из самых существенных его отличий от VBA.



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 15 сентября 2006 12:50
· Личное сообщение · #13

alexas

Комменты излишни. Все всё прочитали и сделали выводы

Тема закрыта.


 eXeL@B —› Программирование —› ? VBS "правильное" удаление
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати