Solución:
Disfrutar:
forfiles -p "C:whatever" -s -m *.* -d <number of days> -c "cmd /c del @path"
Ver forfiles
documentación para más detalles.
Para más golosinas, consulte Un índice AZ de la línea de comandos de Windows XP.
Si no tienes forfiles
instalado en su máquina, cópielo desde cualquier Windows Server 2003 a su máquina Windows XP en %WinDir%system32
. Esto es posible porque el EXE es totalmente compatible entre Windows Server 2003 y Windows XP.
Las versiones posteriores de Windows y Windows Server lo tienen instalado de forma predeterminada.
Para Windows 7 y versiones posteriores (incluido Windows 10):
La sintaxis ha cambiado un poco. Por lo tanto, el comando actualizado es:
forfiles /p "C:whatever" /s /m *.* /D -<number of days> /C "cmd /c del @path"
Ejecute los siguientes comandos:
ROBOCOPY C:source C:destination /mov /minage:7
del C:destination /q
Mueva todos los archivos (usando / mov, que mueve archivos y luego los elimina en lugar de / move que mueve árboles de archivos completos que luego se eliminan) a través de robocopy a otra ubicación, y luego ejecute un comando de eliminación en esa ruta y estará todo bueno.
Además, si tiene un directorio con muchos datos, puede usar /mir
cambiar
Ok estaba un poco aburrido y se le ocurrió esto, que contiene mi versión del reemplazo de época de Linux de un hombre pobre limitado para uso diario (sin retención de tiempo):
7daysclean.cmd
@echo off
setlocal ENABLEDELAYEDEXPANSION
set day=86400
set /a year=day*365
set /a strip=day*7
set dSource=C:temp
call :epoch %date%
set /a slice=epoch-strip
for /f "delims=" %%f in ('dir /a-d-h-s /b /s %dSource%') do (
call :epoch %%~tf
if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
)
exit /b 0
rem Args[1]: Year-Month-Day
:epoch
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2,3 delims=-" %%d in ('echo %1') do set Years=%%d& set Months=%%e& set Days=%%f
if "!Months:~0,1!"=="0" set Months=!Months:~1,1!
if "!Days:~0,1!"=="0" set Days=!Days:~1,1!
set /a Days=Days*day
set /a _months=0
set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m*day&& set /a i+=1)
set /a Months=!_months!
set /a Years=(Years-1970)*year
set /a Epoch=Years+Months+Days
endlocal& set Epoch=%Epoch%
exit /b 0
USO
set /a strip=day*7
: Cambio 7 por el número de días a conservar.
set dSource=C:temp
: Este es el directorio de inicio para buscar archivos.
NOTAS
Este es un código no destructivo, mostrará lo que hubiera sucedido.
Cambio :
if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
a algo como:
if !epoch! LEQ %slice% del /f %%f
para que los archivos realmente se eliminen
febrero: está codificado en 28 días. Los años bissextiles son un infierno para agregar, de verdad. si alguien tiene una idea que no agregaría 10 líneas de código, adelante y publíquela para que la agregue a mi código.
época: No tomé en consideración el tiempo, ya que la necesidad es eliminar archivos anteriores a una fecha determinada, tomar horas / minutos habría eliminado archivos de un día que estaba destinado a conservar.
LIMITACIÓN
época da por sentado que su formato de fecha corta es AAAA-MM-DD. Debería adaptarse para otras configuraciones o una evaluación en tiempo de ejecución (lea sShortTime, configuración vinculada al usuario, configure el orden de campo adecuado en un filtro y use el filtro para extraer los datos correctos del argumento).
¿Mencioné que odio el formato automático de este editor? elimina las líneas en blanco y copiar y pegar es un infierno.
Espero que esto ayude.