Что нового

[Файловая система] Как можно удалить все файлы старше 7 дней в каталоге c:\temp

Статус
Закрыто для дальнейших ответов.

bossdima

Новичок
Сообщения
5
Репутация
0
подскажите
Как можно удалить все файлы старше 7 дней в каталоге c:\temp и поддиректории этого каталога
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
bossdima
Примерно так у меня поучилось:
Код:
#include <Date.au3>

$path = "C:\temp" ;папка для очистки.
$delta = "7" ; кол-во дней, старше которых удаляем.
$aReturn = _FileSearch($path, '*.*')

For $i = 1 To UBound($aReturn) - 1
	$aTime = FileGetTime($aReturn[$i])
	If _DateDiff('D', $aTime[0] & '/' & $aTime[1] & '/' & $aTime[2], _NowCalc()) > $delta Then
		FileDelete($aReturn[$i])
	EndIf
Next

Func _FileSearch($sPath, $sFileMask)
	Local $sOut = StringToBinary("0" & @CRLF, 2), $aOut
	Local $hDir = Run(@ComSpec & ' /U/C DIR "' & $sPath & '\' & $sFileMask & '" /S/B/A-D', @SystemDir, @SW_HIDE, 6)

	While 1
		$sOut &= StdoutRead($hDir, False, True)
		If @error Then ExitLoop
	WEnd

	$aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3)
	If @error Then Return SetError(1)

	$aOut[0] = UBound($aOut) - 1
	Return $aOut
EndFunc   ;==>_FileSearch
Только зачем дублировать темы, Вам же уже ответили здесь: [Файловая система] Скрипт для удаления всех фаилов и папок старше 7 дней
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
bossdima
У меня так получилось. Удаляет файлы старше $delta дней (зависит от значения $flag, чего старше), удаляет пустые подпапки если они также старше $delta дней (зависит от значения $flag, чего старше)
Код:
#include <Date.au3>
#include <File.au3>

$path = "C:\Temp" ;папка для очистки.
$delta = "7" ; кол-во дней, старше которых удаляем.
$flag = 1 ; 0-дата последнего изменения, 1-дата создания, 2-дата последнего открытия.

$aReturn = _FileSearch($path, '*.*')

For $i = 1 To UBound($aReturn) - 1
	$aTime = FileGetTime($aReturn[$i], $flag)
	If _DateDiff('D', $aTime[0] & '/' & $aTime[1] & '/' & $aTime[2], _NowCalc()) > $delta Then
		FileDelete($aReturn[$i])
	EndIf
Next

_DirRemoveEmptyTime($path)

Func _FileSearch($sPath, $sFileMask)
	Local $sOut = StringToBinary("0" & @CRLF, 2), $aOut
	Local $hDir = Run(@ComSpec & ' /U/C DIR "' & $sPath & '\' & $sFileMask & '" /S/B/A-D', @SystemDir, @SW_HIDE, 6)

	While 1
		$sOut &= StdoutRead($hDir, False, True)
		If @error Then ExitLoop
	WEnd

	$aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3)
	If @error Then Return SetError(1)

	$aOut[0] = UBound($aOut) - 1
	Return $aOut
EndFunc   ;==>_FileSearch

Func _DirRemoveEmptyTime($sDIR)
	Local $iPRC, $aDIR = _FileListToArray($sDIR, '*', 2)
	If IsArray($aDIR) Then
		For $i = 1 To $aDIR[0]
			_DirRemoveEmptyTime($sDIR & "\" & $aDIR[$i])
		Next
	EndIf
	If DirGetSize($sDIR) = 0 Then
		$aTimeDIR = FileGetTime($sDIR, $flag)
		If _DateDiff('D', $aTimeDIR[0] & '/' & $aTimeDIR[1] & '/' & $aTimeDIR[2], _NowCalc()) > $delta Then
			DirRemove($sDIR)
		EndIf
	EndIf
EndFunc   ;==>_DirRemoveEmptyTime
 
Статус
Закрыто для дальнейших ответов.
Верх