Somos generosos y ayudamos, pero no hacemos el trabajo de nadie por que no somos las hermanitas de la caridad. Ni siquiera has mostrado un código que demuestre que al menos lo hayas intentado hacer por ti mismo.
Con el comando
ForFiles puedes listar los archivos de un directorio para obtener la fecha de creación/modificación y el nombre completo, el problema es que para una cantidad grande como 50.000 archivos entonces no te merece la pena hacerlo en Batch, es demasiado lento y engorroso, por ese motivo te mostraré una solución en otro lenguaje soportado nativamente por Windows...
El siguiente script lo he desarrollado en
PowerShell, lo que hace es listar los archivos de un directorio según la extensión de archivo especificada, ordenar los archivos por la última fecha de modificación de cada uno, y mover los primeros 1.000 archivos con más antiguedad al directorio de destino:
$srcDir = "C:\Source\"
$dstDir = "C:\Destination\"
$ext = "txt"
$max = 1000
Get-ChildItem -Path $srcDir -Filter "*.$($ext)" -Force |
sort LastWriteTime | select -first $max |
ForEach-Object {
Move-Item -Path $_.FullName -Destination $dstDir -Force
Write-Host "$($_.FullName) -> $($dstDir)$($_.Name)"
}
Write-Host "Press any key to exit..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
EDITO:...O como a mi me gusta desenvolverme, con la librería de classes de .NET:
# User fields
$srcDir = "C:\Source\"
$dstDir = "C:\Destination\"
$ext = "txt"
$max = 1000
# .NET Framework Classes
$CON = [System.Console]
$DIR = [System.IO.Directory]
$PATH = [System.IO.Path]
$LINQ = [System.Linq.Enumerable]
# LINQ's Key-selector functions
$fileFunc = [Func[string, [System.IO.FileInfo]]]{ param($filepath) $filepath }
$sortFunc = [Func[[System.IO.FileInfo], [System.DateTime]]]{ param($file) $file.LastWriteTime }
$files = $LINQ::Select($DIR::GetFiles($srcDir, "*.$($ext)", 0), $fileFunc)
$group = $LINQ::Take($LINQ::OrderBy($files, $sortFunc), $max)
foreach ($file in $group) {
$dstFullname = $PATH::Combine($dstDir, $file.Name)
$CON::WriteLine("$($file.FullName) -> $($dstFullname)")
$file.MoveTo($dstFullname)
}
$CON::WriteLine("Press any key to exit...")
$CON::ReadKey($true)
Saludos