פורסם 2012 בדצמבר 1912 שנים היי, אני משתמש בסקריפט המצורף בכדי למחוק את כל הקבצים הישנים יותר משבוע. הבעיה היא, שברוב המקרים הקבצים לא יושבים בתיקיה אחת אלא בתוך סאב-תיקיות בתוך תיקיה אחת, ואני לא רוצה להריץ עשרות סקריפטים שונים לכל סאב-תיקיה בנפרד (בנוסף לזה ששמות הסאב-תיקיות משתנה בהתאם לפרויקטים וכו'). אשמח אם תוכלו לעזור לי להכיל את הסקריפט הזה על כל הקבצים שבתוך כל הסאב-תיקיות של התיקיה שנקבתי בסקריפט. תודה ' ################################################################' # cleanup-folder.vbs' #' # Removes all files older than 1 week' # Authored by Spencer Kuziw (s.kuziw-at-epic.ca)' # Based on code by YellowShoe' # Version 1.0 - Sept 23 2008' ################################################################Dim fso, f, f1, fc, strComments, strScanDir' user variables' ----------------------------------------------------------------strDir = "FULL\PATH\TO\FOLDER\TO\BE\CLEANED"strDays = 7' DO NOT EDIT BELOW THIS LINE' (unless you know what you are doing)'------------------------------------------------------------------Set fso = CreateObject("Scripting.FileSystemObject")Set f = fso.GetFolder(strDir)Set fc = f.FilesFor Each f1 in fcIf DateDiff("d", f1.DateCreated, Date) > strDays Then'strComments = strComments & f1.name & " " & f1.DateCreated & vbCrLffso.DeleteFile(f1)End IfNext'wscript.echo strCommentsWScript.Quit' eof
פורסם 2012 בדצמבר 1912 שנים רקורסיה!אתה צריך ליצור פונקציה שמקבלת תיקייה ועושה שני דברים: מטפלת בכל הקבצים שבתיקייה, וקוראת לעצמה על כל תתי התיקיות שבה.
פורסם 2012 בדצמבר 1912 שנים ' user variables' ----------------------------------------------------------------strDir = "c:\temp\"strDays = 7' DO NOT EDIT BELOW THIS LINE' (unless you know what you are doing)'------------------------------------------------------------------Set fso = CreateObject("Scripting.FileSystemObject")Set f = fso.GetFolder(strDir)RecursiveDelete fSub RecursiveDelete(Folder) Wscript.echo "Entering folder: " & Folder.Path For Each file in Folder.Files If DateDiff("d", file.DateCreated, Date) > strDays Then Wscript.echo "Deleting file: " & file.Path fso.DeleteFile(file) End If Next For Each Subfolder in Folder.SubFolders RecursiveDelete Subfolder NextEnd Subתהנה. כמו בסקריפט הקודם, תכוון את strDir להפנות לתיקייה שאתה רוצה שימחקו בה הקבצים. אם אתה רוצה שהסקריפט לא ידפיס כלום (כרגע הוא מדפיס איזה קבצים נמחקים) תעיף את שתי השורות שמתחילות ב-Wscript.echo.
פורסם 2012 בדצמבר 2512 שנים מחבר שניצל אתה תותח! זה עושה בדיוק מה שאני צריך האמת שהפרדתי את זה ל-2 סקריפטים שונים, אחד רק עם האקו ואחד בלי האקו בלבד, ככה יש לי "הרצה יבשה", הבעיה היא שהפופ-אפים האלה לא באמת קלים לקריאה, יש מצב שהסקריפט של ההרצה היבשה פשוט יצור קובץ טקסט עם רשימת הקבצים שעומדים להמחק? תודה אגב, אני חושב ממש ברצינות להכנס ל-vbs כי בתפקיד שלי זה הופך להיות דיי הכרחי עם הזמן, לא היתה לי שום נגיעה לסקריפטינג/תכנות ב-3-4 שנים האחרונות וגם לפני זה לא היה שום לימוד מקצועי, מה הדרך הכי straight forward להכנס לזה בלי יותר מידי חפירות מעייפות? עריכה: עוד בעיה שצצה, אם רק קבצים נמחקים, ישארו לי ערמות של תיקיות ריקות ישנות כי הקבצים נכתבים אוטומטית לתוך תיקיה חדשה בכל יום (היררכיה לפי שנה, חודש ויום).
פורסם 2012 בדצמבר 2512 שנים אם מריצים את הפקודה באמצעות cscript במקום באמצעות wscript אז כל ה-echo הופכים להדפסות במקום לחלונות קופצים.אופציה שנייה היא להוסיף בתחילת התוכנית (אחרי ה-Set fso) את השורה הבאות:Set stdout = fso.GetStandardStream (1)ואז להחליף כל Wscript.echo ב- stdout.WriteLine.הוספתי מחיקה של תיקיות ריקות:' user variables' ----------------------------------------------------------------strDir = "c:\temp\"strDays = 7' DO NOT EDIT BELOW THIS LINE' (unless you know what you are doing)'------------------------------------------------------------------Set fso = CreateObject("Scripting.FileSystemObject")Set f = fso.GetFolder(strDir)RecursiveDelete fSub RecursiveDelete(Folder) Wscript.echo "Entering folder: " & Folder.Path For Each file in Folder.Files If DateDiff("d", file.DateCreated, Date) > strDays Then Wscript.echo "Deleting file: " & file.Path fso.DeleteFile(file) End If Next For Each Subfolder in Folder.SubFolders RecursiveDelete Subfolder Next If Folder.Files.Count = 0 And Folder.SubFolders.Count = 0 Wscript.echo "Deleting empty folder: " & Folder.Path fso.DeleteFolder(Folder) End IfEnd Sub
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.