none
Crear Bat para eliminar carpetas, exceptuando las 15 últimas creadas. RRS feed

  • Pregunta

  • Hola!

    Quisiera saber como eliminar archivos de un carpeta en la partición "D". Pero, siempre conservando las últimas 15 carpetas creadas.

    Solo he encontrado información para eliminar todas las subcarpetas dentro de "D:\JPJ" :

    @echo off
    rmdir /s /q D:\JPJ\
    md D:\JPJ\

    ¿Es posible eliminar todas menos las 15 últimas creadas?

    Gracias de antemano.

     

    miércoles, 30 de enero de 2019 11:49

Todas las respuestas

  • Hola Compañero,

    En powershell sería sencillo, te lo dejo por si te vale:

    $carpeta = "D:\JPJ\"
    $NumeroAConservar = 15
    $MiArray = Get-ChildItem –Path $carpeta -Recurse | Sort-Object $_.CreationTime -Descending
    $MiArray[$NumeroAConservar..$MiArray.Length] | Remove-Item

    Saludos,

    miércoles, 30 de enero de 2019 13:51
  • Hola!

    Muchas gracias por la respuesta.

    Gracias por la respuesta. La verdad es que no conozco mucho powershell. Quería hacerlo como bat porque de esa forma lo puedo poner en task scheduler y hacer que se ejecute todos los días, o cada semana, según me convenga.

    ¿Powershell se puede poner en task scheduler para ejecutar periódicamente también o alguna otra forma?

    Gracias,

    Saludos


    jueves, 31 de enero de 2019 9:03
  • Hola,

    Claro que se puede, tan solo tienes que invocar a la aplicación powershell -file "larutaytuficheropowershell"

    Te dejo un enlace donde te explican con mas detalle. Cuando conozcas powershell ya no vuelves a vb :D

    Suerte, 

    jueves, 31 de enero de 2019 9:13
  • Hola!

    Leyendo el código todo parece tener sentido, pero al ejecutarlo me borra por orden alfabetico. Es decir, si tengo 15 carpetas y creo una nueva llamada "1" al ejecutar el powershell borraría la última creada "1". Al hacer distintas pruebas me he dado cuenta que borra alfabéticamente.

    ¿Puede ser que algo en la sintaxis esté fallando? En principio debería ordenar por el tiempo de creación.

    Gracias de antemano!

    viernes, 1 de febrero de 2019 8:36
  • Hola,

    Prueba a ejecutar solo esto y a ver que te muestra:

    $carpeta = "D:\JPJ\"
    $NumeroAConservar = 15
    $MiArray = Get-ChildItem –Path $carpeta -Recurse | Sort-Object $_.CreationTime -Descending

    Debería mostrarte ordenados por fecha de Creación, el más nuevo arriba, yo lo estuvo probando y me funcionó sin problemas.

    Saludos,

    lunes, 4 de febrero de 2019 8:02