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"  
) 
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top