ראשי > Windows > מחיקת קבצים ישנים במערכת ההפעלה Windows

מחיקת קבצים ישנים במערכת ההפעלה Windows

לעיתים אנו מעוניינים למחוק קבצים ישנים בספריה מסויימת או בעץ ספריות. למשל: היינו רוצים למחוק את כל הקבצים שגילם 10 ימים ויותר ואת אלה שנוצרו ב-10 הימים האחרונים היינו מעוניינים להשאיר. אבל לצערינו, אין פקודת DOS במערכת ההפעלה Windows המאפשרת מחיקה מותנית שכזו.

ישנן כמה אפשרויות לבצע את זה:

  • לכתוב סקריפט ב-VBSCRIPT
  • לכתוב סקריפט בשפה החדשה POWERSHELL.
  • לכתוב תוכנית קטנה בשפה עילית.

אני חובב סקריפטים. כשאני עובד ב-UNIX או ב- LINUX אני מוצא את עצמי כותב לא מעט סקריפטים. גם ב-Windows ניתן לכתוב סקריפטים בקלי קלות אם ב- VBSCRIPT או POWERSHELL. האחרונה מצריכה רקע בדוט נט.

במאמר זה אני רוצה להציג סקריפט שכזה שכתבתי ב-VBSCRIPT. לסקריפט יש 3 פרמטרים: שם ה-folder ממנו יש למחוק קבצים ישנים, כמה ימים מקסימום יש לשמור על הקבצים (כל השאר יש למחוק) ואופציה למחוק רק קבצים עם סיומת (extension) מסויימת. הסקריפט מוחק באופן רקורסיבי את הכל הקבצים ב-folder המצויין בפרמטר הראשון וכן את כל הקבצים הישנים שבתיקיות תחתיו.

הרי הוא לפניכם:

'
' This VB Script is responsible for deleting files in a given folder (as an external argument)
' that are older than X days.
' The script also scans files recursively in the subfolder of the given folder
'
' Written by: Lior King
'

dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim oArgs, argsCount

Set oArgs = WScript.Arguments.Unnamed
argsCount = WScript.Arguments.Unnamed.Count

dim MainFolder

If argsCount > 0 then
  set MainFolder = fso.GetFolder(oArgs(0))
End if

If argsCount = 1 then
   ProcessFolder MainFolder, 0, ""
Elseif argsCount = 2 then
   ProcessFolder MainFolder, oArgs(1), ""
ElseIf argsCount = 3 then
   ProcessFolder MainFolder, oArgs(1), oArgs(2)
Else
   WScript.Echo "Error – Missing arguments !!!"
   WScript.Echo ""
   WScript.Echo "Argument 1 – Folder name"
   WScript.Echo "Argument 2 (optional) – DaysBack to delete (Default – ignore dates)"
   WScript.Echo "Argument 3 (optional) – File extension to delete (Default – ignore extensions)."
End if

'—————
' ProcessFolder
'—————
Sub ProcessFolder (folder, DaysBack, Extension)
   On Error Resume Next
   Dim f, singlefile, SubFolders,  fileslist, ExtensionPos

   Set fileslist = folder.Files

   For Each singlefile in fileslist
      ' Check if there is an extension to the file
      ExtensionPos = InStrRev(singlefile.Name,".")
      If ExtensionPos > 0 or Len(Extension) = 0 then
   ' Check if the file's extension matches the require extension.
        if UCase(Mid(singlefile.Name, ExtensionPos+1)) = UCase(Extension) or Len(Extension) = 0 then
         if singlefile.DateLastModified < (now()-DaysBack) then
               singlefile.Delete(force)
            end if
         end if
      end if
   Next

   '
   ' Process recursively the subfolders
   '

   Set SubFolders = folder.Subfolders
   For Each f in SubFolders
     ProcessFolder f, DaysBack, Extension
   Next

End Sub

הפעלת הסקריפט לדוגמה (מתוך שורת פקודה ב-DOS), בהנחה שהסקריפט שמור בקובץ ששמו DeleteOldFiles.vbs  ואנו רוצים למחוק קבצים עם סיומת txt שגילם יותר מ-3 ימים:

cscript DeleteOldFiles.vbs  c:\myfolder 3 txt

Advertisements
  1. אין תגובות.
  1. No trackbacks yet.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

%d בלוגרים אהבו את זה: