עבור לתוכן

צריך עזרה בשינוי vbs קיים

Featured Replies

פורסם

היי,

אני משתמש בסקריפט המצורף בכדי למחוק את כל הקבצים הישנים יותר משבוע.

הבעיה היא, שברוב המקרים הקבצים לא יושבים בתיקיה אחת אלא בתוך סאב-תיקיות בתוך תיקיה אחת, ואני לא רוצה להריץ עשרות סקריפטים שונים לכל סאב-תיקיה בנפרד (בנוסף לזה ששמות הסאב-תיקיות משתנה בהתאם לפרויקטים וכו').

אשמח אם תוכלו לעזור לי להכיל את הסקריפט הזה על כל הקבצים שבתוך כל הסאב-תיקיות של התיקיה שנקבתי בסקריפט.

תודה :)


' ################################################################
' # 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.Files
For Each f1 in fc
If DateDiff("d", f1.DateCreated, Date) > strDays Then
'strComments = strComments & f1.name & " " & f1.DateCreated & vbCrLf
fso.DeleteFile(f1)
End If
Next
'wscript.echo strComments
WScript.Quit
' eof

פורסם

רקורסיה!

אתה צריך ליצור פונקציה שמקבלת תיקייה ועושה שני דברים: מטפלת בכל הקבצים שבתיקייה, וקוראת לעצמה על כל תתי התיקיות שבה.

פורסם
  • מחבר

对不起,这是对我喜欢中国

:-*

פורסם


' 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 f

Sub 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
End Sub

תהנה. כמו בסקריפט הקודם, תכוון את strDir להפנות לתיקייה שאתה רוצה שימחקו בה הקבצים. אם אתה רוצה שהסקריפט לא ידפיס כלום (כרגע הוא מדפיס איזה קבצים נמחקים) תעיף את שתי השורות שמתחילות ב-Wscript.echo.

פורסם
  • מחבר

שניצל אתה תותח! זה עושה בדיוק מה שאני צריך :)

האמת שהפרדתי את זה ל-2 סקריפטים שונים, אחד רק עם האקו ואחד בלי האקו בלבד, ככה יש לי "הרצה יבשה", הבעיה היא שהפופ-אפים האלה לא באמת קלים לקריאה, יש מצב שהסקריפט של ההרצה היבשה פשוט יצור קובץ טקסט עם רשימת הקבצים שעומדים להמחק?

תודה :)

אגב, אני חושב ממש ברצינות להכנס ל-vbs כי בתפקיד שלי זה הופך להיות דיי הכרחי עם הזמן,

לא היתה לי שום נגיעה לסקריפטינג/תכנות ב-3-4 שנים האחרונות וגם לפני זה לא היה שום לימוד מקצועי, מה הדרך הכי straight forward להכנס לזה בלי יותר מידי חפירות מעייפות?

עריכה:

עוד בעיה שצצה, אם רק קבצים נמחקים, ישארו לי ערמות של תיקיות ריקות ישנות כי הקבצים נכתבים אוטומטית לתוך תיקיה חדשה בכל יום (היררכיה לפי שנה, חודש ויום).

פורסם

אם מריצים את הפקודה באמצעות 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 f

Sub 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 If
End Sub

פורסם
  • מחבר

עובד מצויין !

תודה רבה :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים