سؤال

لديّ برنامج نصي 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"  
) 
هل كانت مفيدة؟

المحلول

يحدث فقط ...

لديّ برنامج نصي مشابه جدًا (نص Visual Basic) يقوم بذلك. ومع ذلك ، ستحتاج إلى تعديل مسار الدليل ، وملحق الملف (.rar) وطول التاريخ (في هذا المثال> = 3 قم بتعيين هذا إلى 7):

تحرير 1:ببساطة نسخ ولصق هذا في textfile جديدة وأعد تسمية الامتداد باسم .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

أتمنى أن يساعد ذلك.

نصائح أخرى

إلقاء نظرة على الأداة المساعدة المسمى forfiles.exe - يجب أن يفعل هذا ما تحتاجه

جرب robocopy! يجب عليك أولاً نقل جميع الملفات إلى مجلد حذف ثم Delte the Folder ، شيء من هذا القبيل في ملف دفعة:

md C:\Delete
robocopy YourFolderToDeleteFrom C:\delete /E /minage:7
rmdir C:\delete /S /Q
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top