Ich habe derzeit dieses VBScript, das die Größe eines Ordners überprüft, löscht dann Dateien (älteste zuerst), bis ein Schwellenwert erreicht ist.Ändern Sie ein Skript, um verbleibenden Speicherplatz eines Laufwerks zu überprüfen
Option Explicit
'use next line for production
On Error Resume Next
'use next line for debugging
'On Error GoTo 0
Dim strResult: strResult = Wscript.ScriptName
Dim objFSO, strOldestFile, dtmOldestDate, strFolder, oFolder, intFolderSize
Set objFSO = CreateObject("Scripting.FileSystemObject")
dtmOldestDate = Now
strFolder = "C:\Users\PLEX\Downloads\Torrent\"
strOldestFile = ""
Set oFolder = objFSO.GetFolder(strFolder)
intFolderSize = Int(((oFolder.Size/1024)/1024)/1024)
Do While intFolderSize >= 110
strOldestFile = ""
dtmOldestDate = Now
FindOldestFile oFolder
'WScript.Echo strOldestFile
objFSO.DeleteFile strOldestFile, True
strResult = strResult & vbNewLine & dtmOldestDate & vbTab & strOldestFile
intFolderSize = Int(((oFolder.Size/1024)/1024)/1024)
Loop
'WScript.Echo strResult
WScript.Quit
Sub FindOldestFile(objFolder)
Dim objFile, colFiles, colFolders, strFile, dtmFileDate
'find oldest file
Set colFiles = objFolder.Files
For Each objFile In colFiles
strFile = objFile.Path
dtmFileDate = objFile.DateCreated
If dtmFileDate < dtmOldestDate Then
dtmOldestDate = dtmFileDate
strOldestFile = strFile
End If
Next
'recurse subfolders
Set colFolders = objFolder.SubFolders
For Each objFile In colFolders
FindOldestFile objFile
Next
End Sub
Derzeit dieses Skript wird:
- Überprüfen Sie die Kapazität des Ordners A einschließlich aller Unterordner.
- Löschen von Dateien (älteste zuerst) aus dem Ordner A und Unterordner, bis eine Schwelle (in diesem Fall, 110GB)
erreichte Ich möchte das Skript ändern, dies zu tun:
- Überprüfen Sie die Kapazität von Ordner A einschließlich aller Unterordner.
- Löschen Sie Dateien (älteste zuerst) aus Ordner B (der ein Unterordner von Ordner A ist) und Unterordner, bis ein Schwellenwert erreicht ist.
Zum Beispiel ist es möglich, dieses Skript erhält die verwendete Kapazität des gesamten C zu überprüfen: Laufwerk und löschen Sie die ältesten Dateien aus C:\Users\PLEX\Downloads\Torrent\
, wenn es weniger als 5% auf C verbleibende :?
Edit: Ich hatte schon vollen Zugang und fixiert den Fehler durch C:\
-C:
ändern. Ich änderte auch C:\Users\PLEX\Desktop\New Folder
zu \Users\PLEX\Desktop\New Folder
und bekomme jetzt keine Fehler. Das einzige Problem ist, dass IntFolderSize
immer noch die Größe meines Unterordners zeigt, nicht die Wurzel. Ich habe das unter Verwendung von Wscript.Echo intfoldersize
bestätigt. Mein aktuelles Skript ist unten. Wie kann ich IntFolderSize
erhalten, um die verwendete Größe der Wurzel anzuzeigen?
option explicit
'use next line for production
'On Error Resume Next
'use next line for debugging
'On Error GoTo 0
Dim strResult: strResult = Wscript.ScriptName
Dim objFSO, strOldestFile, dtmOldestDate, strFolder, oFolder, intFolderSize
Set objFSO = CreateObject("Scripting.FileSystemObject")
dtmOldestDate = Now
strFolder = "C:"
strOldestFile = ""
Set oFolder = objFSO.GetFolder(strFolder)
intFolderSize = Int(((oFolder.Size/1024)/1024)/1024)
Wscript.Echo intfoldersize
Do While intFolderSize >= 70
strOldestFile = ""
dtmOldestDate = Now
FindOldestFile objFSO.GetFolder(objFSO.BuildPath(strFolder,"\Users\PLEX\Desktop\New Folder\"))
'wscript.echo strOldestFile
objFSO.DeleteFile strOldestFile, True
strResult = strResult & vbNewLine & dtmOldestDate & vbTab & strOldestFile
intFolderSize = Int(((oFolder.Size/1024)/1024)/1024)
Loop
'Wscript.Echo strResult
Wscript.Quit
Sub FindOldestFile(objFolder)
Dim objFile, colFiles, colFolders, strFile, dtmFileDate
' find oldest file
Set colFiles = objFolder.Files
For Each objFile in colFiles
strFile = objFile.Path
dtmFileDate = objFile.DateCreated
If dtmFileDate < dtmOldestDate Then
dtmOldestDate = dtmFileDate
strOldestFile = strFile
End If
Next
' recurse subfolders
Set colFolders = objFolder.SubFolders
For Each objFile in colFolders
FindOldestFile objFile
Next
End Sub
[Dies ist, was mein Skript jetzt aussieht .] (http://pastebin.com/AGQ3mmgS) Ich bekomme einen Zugriff verweigert Zugriff auf Zeile 16 'intFolderSize = Int (((OFolder.Size/1024)/1024)/1024)'. Irgendeine Idee, wie man das repariert? – Cameron
'" sub \ folder "' muss relativ zum Stammordner sein, kein absoluter Pfad, und Sie müssen vollen Zugriff auf alles unter dem Stammordner haben, damit '.Size' funktioniert. –
Ich hatte bereits vollen Zugriff und behob den Fehler, indem ich 'C: \' zu 'C:' änderte.Ich habe auch "C: \ Benutzer \ PLEX \ Desktop \ Neuer Ordner" in "\ Benutzer \ PLEX \ Desktop \ Neuer Ordner" geändert und erhalte jetzt keine Fehler. Das einzige Problem ist, dass "IntFolderSize" immer noch die Größe meines Unterordners anzeigt, nicht das der Wurzel. Ich habe das mit 'Wscript.Echo intfoldersize' bestätigt. [Mein aktuelles Skript kann hier gefunden werden.] (Http://pastebin.com/NbeWu1g) Wie kann ich 'IntFolderSize' bekommen, um die verwendete Größe der Wurzel anzuzeigen? – Cameron