Что нового

Как Удалить файлы по маске в директории и поддиректориях скрипта?!

Guezt

Продвинутый
Сообщения
335
Репутация
82
пользовался вот такой маской для удаления файлов 1.tmp 2.tmp
Код:
FileDelete(@ScriptDir &"\"&"*.tmp")
но теперь надо что бы удалять не только в директории скрипта но и в поддиректориях... смысл в том что имена папок поддиректории неизвестны :(
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Код:
#Include <File.au3>
$allfolders = _FileListToArray(@ScriptDir, "*", 2)
For $i=1 to $allfolders[0]
FileDelete(@ScriptDir & "\" & $allfolders[$i] & "\" & "*.*")
Next
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
82
Спасибо, работает, но если количество поддиректорий неизвестно!? то есть глубина вложения 2 или более папок? как тогда быть?

Или если их вообще нет то выдает ошибку
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Ну проверки я думал всам сможешь вставить.
Код:
If IsArray($allfolders) Then; если это массив, значит что-то есть
;тут что-то делаем
EndIf

а вот что делать с поддиректориями я хз.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Может, не совсем элегантно, но...
Код:
del /s *.tmp
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Вот скрипт для рекурсивной обработки целевой папки на наличие и удаление файлов расширение которых задано в переменной filter
Код:
#include <File.au3>
$src = FileSelectFolder('Please, choose folder to process', '', 1 + 2 + 4, @ScriptDir)
If @error Then Exit
$filter = 'tmp|temp'; any other file extensions to be excluded from copy list separated by pipe "|"
_Delete($src, $filter)

Func _Delete($source, $filter = 'tmp|temp')
    ;MsgBox(0, '', $source & @CRLF & $destination)
    $aFolders = _FileListToArray($source, '*', 2); Folders
    $aFiles = _FileListToArray($source, '*', 1); Files
    If Not IsArray($aFolders) AND Not IsArray($aFiles) Then Return ''; No files or fodlers found in source path
    For $j = 1 to $aFiles[0]
        $ext = _ExtDefine($aFiles[$j])
        If StringInStr($filter, $ext) Then FileDelete($source & '\' & $aFiles[$j])
    Next
    For $i = 1 to $aFolders[0]
        $new_source = $source & '\' & $aFolders[$i]
        _Delete($new_source, $filter); Recursive processing for subfolders
    Next
EndFunc

;;; Function for determination of file extension
Func _ExtDefine($file)
    If StringInStr($file, '\') Then
        $aFile = StringSplit($file, '\')
        $file = $aFile[$aFile[0]]
    EndIf
    If Not StringInStr($file, '.') Then Return ''
    $aFile = StringSplit($file, '.')
    Return $aFile[$aFile[0]]
EndFunc
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
82
snoitaleR сказал(а):
Может, не совсем элегантно, но...
Код:
del /s *.tmp

Не хотелось бы с использованием командной строки... или остается только этот вариант?!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Guezt [?]
Не хотелось бы с использованием командной строки... или остается только этот вариант?!
это что, шутка такая?
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
82
to Kaster

Спасибо! :ok: нет это не шутка это я просто страницу не обновил, а твой пост увидел только сегодня! :smile:
 
Верх