2011-03-31 66 views
22

Quiero crear un archivo por lotes que debe eliminar todas las subcarpetas de una carpeta y con más de 10 días, utilizando Windows 7archivo por lotes para eliminar las carpetas de más de 10 días en Windows 7

Cualquier ayuda se agradece.

+0

Tenga en cuenta: ¿desea eliminar todas las carpetas que tienen más de 10 días, o una sola carpeta * si * es anterior a 10 días ...? – Blorgbeard

+0

eliminar todas las carpetas con más de 10 días de antigüedad, por ejemplo: carpeta que es más antigua que 10 días en D:/Se debe eliminar la prueba, no la que se creó recientemente. – nilesh

+0

posible duplicación de [Eliminar directorios secundarios anteriores a 30 días] (http://stackoverflow.com/questions/3419091/delete-sub-directories-older-than-30-days) – Blorgbeard

Respuesta

39

Adaptado de this answer to a very similar question:

FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd /S /Q @path" 

Debe ejecutar este comando desde dentro de la carpeta d:\study. Eliminará todas las subcarpetas que tengan más de 10 días.

El /S /Q después del rd hace que elimine carpetas, incluso si no están vacías, sin preguntar.

Le sugiero que ponga el comando anterior en un archivo .bat y guárdelo como d:\study\cleanup.bat.

+0

Utilicé este comando, y las carpetas se han eliminado. Pero aparece un error: ERROR: el sistema no puede encontrar el archivo especificado. Necesito salir con error_level = 0 –

+3

No creo que necesite la opción FORFILES/S ya que la eliminación de los subdirectorios será a través de la opción rd/S. – dmachop

0

Si desea utilizarlo con el parámetro (. Es decir, eliminar todos los subdirectorios bajo el directorio dado), a continuación, poner estas dos líneas en un archivo * .bat o .cmd *:

@echo off 
for /f "delims=" %%d in ('dir %1 /s /b /ad ^| sort /r') do rd "%%d" 2>nul && echo rmdir %%d 

y añadir Script ruta a su variable de entorno PATH. En este caso, puede llamar a su archivo por lotes desde cualquier ubicación (supongo que la ruta UNC también debería funcionar).

Ej .:

YourBatchFileName c:\temp 

(puede usar comillas si es necesario)

eliminará todos los subdirectorios vacíos bajo carpeta c: \ temp

YourBatchFileName 

eliminará todos los subdirectorios vacíos bajo el directorio actual.

7

FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"

no pude conseguir la sugerencia de Blorgbeard para trabajar, pero yo era capaz de conseguir que funcione con RMDIR vez de RD:

FORFILES /p N:\test /S /D -10 /C "cmd /c IF @isdir == TRUE RMDIR /S /Q @path"

Desde RMDIR no eliminará las carpetas que no están vacías así que también terminé usando este código para eliminar los archivos que tenían más de 10 días y luego las carpetas que tenían más de 10 días.

FOR /d %%K in ("n:\test*") DO (

FOR /d %%J in ("%%K*") DO (

FORFILES /P %%J /S /M . /D -10 /C "cmd /c del @file"

)

)

FORFILES /p N:\test /S /D -10 /C "cmd /c IF @isdir == TRUE RMDIR /S /Q @path"

I utiliza este código para purgar las sub carpetas en las carpetas dentro de prueba (ejemplo n: \ test \ abc \ 123 obtendría purgado cuando están vacíos, pero n: \ test \ abc no llegaría purgado

Cuestiones relacionadas