Что нового

Удалить все файлы кроме...

DesMono

Новичок
Сообщения
19
Репутация
0
Что-то не удалось в поиске найти понятный для себя ответ...
Задача следующая. В папке есть много нужных файлов вида:
9_23655_52.png
1_98564_58.png
5_97465_99.jpg
...
а так же куча разных ненужных файлов.
Как удалить всё, оставив только нужные файлы (по маске)?
 

Police

Новичок
Сообщения
27
Репутация
3
А как выглядят ненужные файлы? Ведь маску нужно подбирать именно для них...
 
Автор
D

DesMono

Новичок
Сообщения
19
Репутация
0
Ненужные выглядят как угодно, но только не так, как нужные. :smile:
Например: aq856.txt, a4q78a4.bmp, 45654565.doc и.т.д.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
DesMono,
Попробуйте примерно так.
Код:
#include <File.au3>
;#include <Array.au3>

$sDir = @ScriptDir & '\Test\'
$iDel = 0
$iNoDel = 0
$aFiles = _FileListToArray($sDir, '*', 1)
If @error Then Exit -13
;_ArrayDisplay($aFiles)
For $i = 1 To $aFiles[0]
	If StringRegExp($aFiles[$i], '(?i)^\d{1,}_\d{5}_\d{2}\.png|jpg$') Then
		$iNoDel += 1
		ContinueLoop
	EndIf
	;If FileDelete($sDir & $aFiles[$i]) Then
	If FileRecycle($sDir & $aFiles[$i]) Then
		$iDel += 1
	EndIf
Next

MsgBox(64, 'Info', 'All files: ' & $aFiles[0] & @LF & 'Del: ' & $iDel & @LF & 'No Del: ' & $iNoDel & @LF & _
		'Error Del: ' & $aFiles[0] - $iNoDel - $iDel)
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
У меня работает ... ;)
Код:
#include <File.au3>

Global $Path = @ScriptDir & '\Test'

$Files = _FileListToArray($Path)
For $i = 1 To $Files[0]
	$Reg = StringRegExp($Files[$i], '\d_\d{5}_\d{2}', 3)
	If $Reg = 1 Then FileDelete($Path & '\' & $Files[$i])
Next
 
Автор
D

DesMono

Новичок
Сообщения
19
Репутация
0
madmasles, спасибо, работает. Но мусор с расширениями .png и .jpg тоже есть, а он остался. Можно как-то подкорректировать?

Zaramot, твой скрипт вообще без разбора всё удаляет. )

p.s. где можно почитать про использование/создание масок?

Zaramot, всё отлично работает, спасибо, у меня была ошибка!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <File.au3>

$sDir = @ScriptDir & '\Test\'
$aFiles = _FileListToArray($sDir, '*.*', 1)
If @error Then Exit

For $i = 1 To $aFiles[0]
    If Not StringRegExp($aFiles[$i], '(?i)^\d+_\d{5}_\d{2}\.(png|jpg)$') Then
        FileRecycle($sDir & $aFiles[$i])
		ConsoleWrite($aFiles[$i] & @LF)
    EndIf
Next
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
DesMono
Посмотри функцию _FO_FileSearch, в ней параметр $fInclude инвертирует маску, то есть можно указать маску, файлы которой будут игнорироваться. Скачать

Код:
#include <Array.au3> ; для _ArrayDisplay
$aFileList=_FO_FileSearch($sPath, '?_?????_??.png', False)
_ArrayDisplay($aFileList, 'вот')
 
Автор
D

DesMono

Новичок
Сообщения
19
Репутация
0
AZJIO, спасибо, я изначально искал что-то вроде инверсии маски при удалении. Но из-за:
Код:
#include <FileOperations.au3>
у меня постоянно появляется окно Контроля программ от Касперского и тормозит запуск скрипта:
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
DesMono
По этому поводу ничего сказать не могу, у меня касперский ничего не такого не выдаёт, и код в функциях ничем не примечателен, что могло бы это вызвать. Также у меня 10 программ используют эту функцию (выложены на сайте) и на официальном форуме только положительные отзывы.
 
Автор
D

DesMono

Новичок
Сообщения
19
Репутация
0
AZJIO
я понимаю, что там ничего страшного нет и скрипт вполне рабочий. Сам не знаю, почему Каспер что-то там потенциально видит. И вроде мелочь, а не удобно использовать постоянно нажимать "Да, доверяю".

Кстати, _FO_FileSearch не понимает подобной маски: '\d_\d{5}_\d{2}.jpg' ?
 
Верх