Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как программно удалить пустые папки ? (http://forum.oszone.net/showthread.php?t=152090)

R.M.L 02-10-2009 11:00 1232609

Как программно удалить пустые папки ?
 
Привет
У меня есть аддон встраиваемый в контекстное меню проводника для удаления пустых папок. Но, этот аддон действует только при наведении на какую то определенную папку для сканирования. Вопрос - как мне сделать это программно, одним внешним файлом?

amel27 02-10-2009 12:02 1232644

Код:

#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 1232666

amel27, спасибо то что надо.
и еще , можно сделать так чтобы при длительном сканировании всего диска весь этот процесс обрабатывался на прогресс баре?
не могу поставить полезное сообщение, видимо после твоего выступления админ на время удалил эту возможность для меня)
+5

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

amel27 03-10-2009 07:04 1233240

Цитата:

Цитата R.M.L
можно сделать так чтобы при длительном сканировании всего диска весь этот процесс обрабатывался на прогресс баре? »

Код:

#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 1233726

чртт эт здорово ) показывает и обработанные папки. Спасибо!! ураааааааа

vla-ad 15-05-2010 00:02 1413598

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

FlatX007 15-05-2010 19:08 1413974

Цитата:

Цитата amel27
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 1414030

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

Yashied 17-05-2010 11:07 1414999

Есть такая простая функция _WinAPI_PathIsDirectoryEmpty() из WinAPIEx.au3.


Время: 05:57.

Время: 05:57.
© OSzone.net 2001-