script de morcego para excluir o arquivo com mais de 7 dias
-
25-09-2019 - |
Pergunta
Eu tenho um script de morcego no qual coloca todos os arquivos em uma pasta e depois converte esta pasta com seu conteúdo em um arquivo One RAR. Esse script também adiciona a data atual depois de fazer uma cópia e move esse arquivo para uma pasta de backup. Estou planejando ter esse arquivo de morcego executado por uma tarefa do Windows Scheduler todos os dias.
Minha pergunta:
Existe uma maneira de adicionar neste script para excluir todos os arquivos RAR com mais de 7 dias na pasta de backup?
for /f "delims==" %%D in ('DIR D:\scripts /A /B /S') do (
"C:\Program Files\WinRAR\WinRAR.EXE" a -agyyyy-MM-dd -r "c:\backup\scripts.rar" "%%D"
)
Solução
Isso só acontece ...
Eu tenho um script muito semelhante (Script Visual Basic) que faz isso. No entanto, você precisará modificar o caminho do diretório, a extensão do arquivo (.RAR) e o comprimento da data (neste exemplo é> = 3 Defina isso como 7):
Editar 1:Basta copiar e colar isso em um novo arquivo de texto e renomear a extensão como .vbs.
Script de solução de amostra:
On Error Resume Next
Dim fso, folder, files, sFolder, sFolderTarget
Set fso = CreateObject("Scripting.FileSystemObject")
'location of the database backup files
sFolder = "X:\Data\SQL_Backup\"
Set folder = fso.GetFolder(sFolder)
Set files = folder.Files
'used for writing to textfile - generate report on database backups deleted
Const ForAppending = 8
'you need to create a folder named “scripts” for ease of file management &
'a file inside it named “LOG.txt” for delete activity logging
Set objFile = fso.OpenTextFile(sFolder & "\scripts\LOG.txt", ForAppending)
objFile.Write "================================================================" & VBCRLF & VBCRLF
objFile.Write " DATABASE BACKUP FILE REPORT " & VBCRLF
objFile.Write " DATE: " & FormatDateTime(Now(),1) & "" & VBCRLF
objFile.Write " TIME: " & FormatDateTime(Now(),3) & "" & VBCRLF & VBCRLF
objFile.Write "================================================================" & VBCRLF
'iterate thru each of the files in the database backup folder
For Each itemFiles In files
'retrieve complete path of file for the DeleteFile method and to extract
'file extension using the GetExtensionName method
a=sFolder & itemFiles.Name
'retrieve file extension
b = fso.GetExtensionName(a)
'check if the file extension is BAK
If uCase(b)="BAK" Then
'check if the database backups are older than 3 days
If DateDiff("d",itemFiles.DateCreated,Now()) >= 3 Then
'Delete any old BACKUP files to cleanup folder
fso.DeleteFile a
objFile.WriteLine "BACKUP FILE DELETED: " & a
End If
End If
Next
objFile.WriteLine "================================================================" & VBCRLF & VBCRLF
objFile.Close
Set objFile = Nothing
Set fso = Nothing
Set folder = Nothing
Set files = Nothing
Espero que isso ajude.
Outras dicas
Dê uma olhada em um utilitário chamado forfiles.exe - isso deve fazer o que você precisa
Experimente robocopy! Você precisa primeiro mover todos os arquivos para um dobrador de exclusão e depois descascar a pasta, algo assim em um arquivo em lote:
md C:\Delete
robocopy YourFolderToDeleteFrom C:\delete /E /minage:7
rmdir C:\delete /S /Q