PDA

Показать полную графическую версию : [решено] Как программно удалить пустые папки ?


R.M.L
02-10-2009, 11:00
Привет
У меня есть аддон встраиваемый в контекстное меню проводника для удаления пустых папок. Но, этот аддон действует только при наведении на какую то определенную папку для сканирования. Вопрос - как мне сделать это программно, одним внешним файлом?

amel27
02-10-2009, 12:02
#Include <File.au3>

$sDIR = "C:\TEST"
$iCNT = _DirRemoveEmpty($sDIR)

MsgBox(0, "Сообщение", "Удалено "& $iCNT &" пустых каталогов")

Func _DirRemoveEmpty($sRoot)
Local $iDIR = 0, $aDIR = _FileListToArray($sRoot,'*', 2)

If IsArray($aDIR) Then
For $i=1 To $aDIR[0]
$iDIR += _DirRemoveEmpty($sRoot &"\"& $aDIR[$i])
Next
EndIf

If DirGetSize($sRoot)=0 Then $iDIR += DirRemove($sRoot)
Return $iDIR
EndFunc
P.S. папки "только для чтения" при удалении игнорируются, наличие файлов с нулевым размером расценивается как их отсутствие (учитывается только размер)

R.M.L
02-10-2009, 12:34
amel27, спасибо то что надо.
и еще , можно сделать так чтобы при длительном сканировании всего диска весь этот процесс обрабатывался на прогресс баре?
не могу поставить полезное сообщение, видимо после твоего выступления админ на время удалил эту возможность для меня)
+5

Сканировал все диски, прошло времени около 6 минут и удалено 768 пустых папок. здорово

amel27
03-10-2009, 07:04
можно сделать так чтобы при длительном сканировании всего диска весь этот процесс обрабатывался на прогресс баре? »
#Include <File.au3>

$sRoot = "C:\TEST"

ProgressOn ("Поиск пустых папок", "Подготовка к поиску...")
Global $iCNT = 0, $iDEL = 0, $aRoot = DirGetSize($sRoot, 1)

$aRoot[2]+=1
_DirRemoveEmpty($sRoot)

ProgressOff()
MsgBox(64, "Поиск пустых папок", "Поиск завершен"&@CRLF&@CRLF&"Папок ВСЕГО: "&@TAB&$iCNT&@CRLF&"Папок удалено: "&@TAB&$iDEL)

Func _DirRemoveEmpty($sDIR)
Local $iPRC, $aDIR = _FileListToArray($sDIR,'*', 2)

If IsArray($aDIR) Then
For $i=1 To $aDIR[0]
$iDEL += _DirRemoveEmpty($sDIR &"\"& $aDIR[$i])
Next
EndIf

$iCNT +=1
$iPRC = Int($iCNT*100/$aRoot[2])
ProgressSet($iPRC, "Обработано папок: "&$iCNT&@TAB&@TAB&" Удалено: "&$iDEL, $sDIR)

If DirGetSize($sDIR)=0 Then $iDEL += DirRemove($sDIR)
EndFunc

R.M.L
03-10-2009, 18:17
чртт эт здорово ) показывает и обработанные папки. Спасибо!! ураааааааа

vla-ad
15-05-2010, 00:02
помогите удалить пустой каталог
Возник после удаления игрушечного мусора
ничего не помогает - Unloocer, plagin TotCom - короче нет
может кто знает как удалить пустой каталог - даже без имени "..." - во такое
XP Win SP3 Pro

FlatX007
15-05-2010, 19:08
amel27 »

у меня ошибку выдаёт

C:\Users\????\Desktop\AutoIt v3 Script.au3 (8) : ==> Subscript used with non-Array variable.: $aRoot[2]+=1 $aRoot^ ERROR

vla-ad
15-05-2010, 20:37
НАШЕЛ здесь на сайте очень удобное предложение
вызов cmd затем
rd /s /q d:\... (указать путь каталога)
помогло даже там, где ничего не помогало совсем.

Yashied
17-05-2010, 11:07
Есть такая простая функция _WinAPI_PathIsDirectoryEmpty() из WinAPIEx.au3 (http://autoit-script.ru/index.php?topic=47.0).




© OSzone.net 2001-2012