скрипт bat для удаления файла старше 7 дней - PullRequest
0 голосов
/ 09 июня 2010

У меня есть сценарий bat, который получает все файлы в папке, а затем преобразует эту папку с ее содержимым в один RAR-файл. Этот скрипт также добавляет текущую дату, как только он делает копию, и перемещает ее в резервную папку. Я планирую, чтобы этот bat-файл запускался задачей планировщика Windows каждый день.

Мой вопрос:

Есть ли способ добавить в этот скрипт, чтобы также удалить все файлы rar старше 7 дней в папке резервных копий?

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"  
) 

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Так получилось ...

У меня есть очень похожий скрипт (Visual Basic Script), который делает это.Однако вам нужно будет изменить путь к каталогу, расширение файла (.RAR) и длину даты (в этом примере это> = 3, установите значение 7):

РЕДАКТИРОВАТЬ 1: Просто скопируйтеи вставьте его в новый текстовый файл и переименуйте расширение в .vbs.

Пример сценария решения:

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

Надеюсь, это поможет.

0 голосов
/ 09 июня 2010

Попробуйте робокопию! Сначала вы должны переместить все файлы в папку для удаления, а затем удалить папку, как показано в пакетном файле:

md C:\Delete
robocopy YourFolderToDeleteFrom C:\delete /E /minage:7
rmdir C:\delete /S /Q
0 голосов
/ 09 июня 2010

взгляните на утилиту forfiles.exe - она ​​должна делать то, что вам нужно

...