30 votos

Borrar Archivos de más de (x) Días?

¿Qué es una buena línea de comandos de Windows opción para borrar todos los archivos en una carpeta determinada mayores de (n) los días?

También tenga en cuenta que no puede ser de muchos miles de estos archivos, por lo forfiles con un shell cmd , no es una gran idea.. a menos que te gusta de desove miles de shells de comandos. Creo que ese es un muy desagradable hack, así que vamos a ver si podemos hacerlo mejor!

Idealmente, algo integrado en (o fácilmente instalable en Windows Server 2008.

42voto

Jeff Atwood Puntos 31111

Miré a mi alrededor un poco más y encontró un powershell manera:

Borrar todos los archivos de más de 8 días de edad de la carpeta especificada (con vista previa)

dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif

(quitar el-whatif a hacer que suceda)

6voto

PaulPlum Puntos 180

El amor de Jeff comando de PowerShell, pero para una alternativa vbs solución para las máquinas de Windows sin PowerShell puede intentar el siguiente.

Guardar como (nombre de archivo).vbs y ejecutar:
*(nombre de archivo).vbs (target_dir) (NoDaysSinceModified) (Acción)*

El tercer parámetro, (Acción) es opcional. Sin los archivos mayores de (NoDaysSinceModified) serán listados. Withit establecer como 'D' se va a borrar archivos de más de (NoDaysSinceModified)

Ejemplo

PurgeOldFiles.vbs "c:\Log los Archivos" 8
se lista todos los archivos en c:\Log Archivos de más de 8 días de edad

PurgeOldFiles.vbs "c:\Log los Archivos" 8 D
se elimine todos los archivos en c:\Log Archivos de más de 8 días de edad

nota: esta es una versión modificada de Haidong Ji secuencia de comandos en SQLServerCentral.com

Option Explicit
on error resume next
    Dim oFSO
    Dim sDirectoryPath
    Dim oFolder
    Dim oFileCollection
    Dim oFile
    Dim iDaysOld
    Dim fAction

    sDirectoryPath = WScript.Arguments.Item(0)
    iDaysOld = WScript.Arguments.Item(1)
    fAction = WScript.Arguments.Item(2)
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    set oFolder = oFSO.GetFolder(sDirectoryPath)
    set oFileCollection = oFolder.Files

If UCase(fAction) = "D" Then
'Walk through each file in this folder collection. 
'If it is older than iDaysOld, then delete it.
    For each oFile in oFileCollection
    	If oFile.DateLastModified < (Date() - iDaysOld) Then
    		oFile.Delete(True)
    	End If
    Next
else
'Displays Each file in the dir older than iDaysOld
    For each oFile in oFileCollection
    	If oFile.DateLastModified < (Date() - iDaysOld) Then
    		Wscript.Echo oFile.Name & " " & oFile.DateLastModified
    	End If
    Next
End If


'Clean up
    Set oFSO = Nothing
    Set oFolder = Nothing
    Set oFileCollection = Nothing
    Set oFile = Nothing
    Set fAction = Nothing

3voto

brianegge Puntos 12857

Echa un vistazo a este http://sourceforge.net/projects/delold como este es lo que yo uso.

simple, pero funciona. delold-d 14 Elimina los archivos más antiguos que de los 14 días de la carpeta actual.

3voto

Chris Driver Puntos 779

No realmente de la línea de comandos, pero me gusta usar LINQPad como C# host de secuencias de comandos:
(lo que me dio una idea para una línea de comandos C# scripting cosita a la archivos vbs)

var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories)
            where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8)
    		select f;

foreach(var f in files)
    File.Delete(f);

2voto

Faken Puntos 276

Algo similar se puede lograr con cygwin (u otras alternativas) comando "buscar". Pero esto requiere de la instalación de cygwin o tener la versión portátil en la mano.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: