2017-06-28 3 views
0

Also muss ich ein Skript schreiben, um alle Dateien außer n neueste (zuletzt erstellt) zu löschen. Ich führe mein Skript mit zwei Argumenten aus: Ordnerverzeichnis und Anzahl der Dateien, die nicht entfernt werden sollen.Löschen aller Dateien außer wenigen

Hier ist mein Skript, aber es entfernt tatsächlich zufällige Dateien. Wie kann ich es schaffen, n neueste Dateien zu verlassen?

Wie ich laufen Skript: delete C:\users\Adam\Desktop\Test 3

Mein Skript:

Dim address 
Dim n 
Set fso = CreateObject("Scripting.FileSystemObject") 

If (Wscript.Arguments.Count <> 2) Then 
    MsgBox("Wrong number of paramets") 
Else 
    address = Wscript.Arguments(0) 
    n = Wscript.Arguments(1) 
    MsgBox(address & " " & n) 
    Set objFolder = fso.GetFolder(address) 
    For Each objFile in objFolder.files 
     If n <> 0 Then 
      n = n - 1 
     else 
      objFile.Delete True 
     End If 
    Next 
End if 

Code mit sort:

Function SortFiles(files) 
    ReDim sorted(files.Count - 1) 
    Dim file, i, j 
    i = 0 
    For Each file in files 
    Set sorted(i) = file 
    i = i + 1 
    Next 
    For i = 0 to files.Count - 2 
    For j = i + 1 to files.Count - 1 
     If sorted(i).DateLastModified < sorted(j).DateLastModified Then 
     Dim tmp 
     Set tmp = sorted(i) 
     Set sorted(i) = sorted(j) 
     Set sorted(j) = tmp 
    End If 
    Next 
    Next 
    SortFiles = sorted 
End Function 

If (Wscript.Arguments.Count <> 2) Then 
    MsgBox("Wrong number of paramets") 
else 
    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim files 
    address = Wscript.Arguments(0) 
    n = Wscript.Arguments(1) 
    Set files = fso.GetFolder(address).Files 
    Dim file 
    For Each file in SortFiles(files) 
     If n <> 0 Then 
      n = n - 1 
     else 
      file.Delete True 
     End If 
    Next 
end if 
+0

Wenn Sie sag "neuestes", tu y meinst du zuletzt erstellt oder zuletzt geändert? – freginold

+0

ich meine erstellt. – murilo

+1

Sie müssen die Dateien sortieren, bevor Sie alle bis auf "n" löschen, wenn Sie die neuesten speichern möchten. Siehe [diese Antwort] (https://stackoverflow.com/a/16895790/5463636) und [diese Antwort] (https://stackoverflow.com/a/16289700/5463636) für Möglichkeiten, dies zu tun. – freginold

Antwort

1

Folgendes sollte die Arbeit machen:

Dim address 
Dim n, no_of_files 

Set fso = CreateObject("Scripting.FileSystemObject") 

If (Wscript.Arguments.Count <> 2) Then 
    MsgBox("Wrong number of paramets") 
Else 
    address = Wscript.Arguments(0) 
    n = Wscript.Arguments(1) 
    MsgBox(address & " " & n) 
    Set objFol = fso.GetFolder(path) 
    no_of_files = n 
    While no_of_files>0 
     latestDate = 0 
     Set objFiles = objFol.Files 

     'Loop to get the creation date of the newest File 
     For Each file In objFiles 
      tempDate = file.DateCreated 
      If CDate(tempDate)>CDate(latestDate) Then 
       latestDate = tempDate 
      End If 
     Next 

     'Loop to delete the newest file using the date fetched in the last loop 
     For Each file In objFiles 
      If file.DateCreated = latestDate Then 
       file.Delete True 
      End If 
     Next 
     no_of_files = no_of_files-1 
    Wend 
End if 
Set fso = Nothing 
Verwandte Themen