Não somos um serviço de criação de scripts, mas eu tinha algum tempo e interesse, então aqui vai você, em um script do PowerShell:
#Set directory to search (. = current directory).
$dir = "."
#Get a list of all the files (only), sorted with newest on top.
$dirFiles = Get-ChildItem -Path $dir | where { ! $_.PSIsContainer } | Sort-Object LastAccessTime -Descending
#Create an array to hold unique file name parts.
$uniqueFileNameParts = @()
#Create an array to hold final file list of files to keep.
$filesToKeep = @()
#Add the file name of the script itself to the files to keep, to prevent it from being deleted if it's in the same folder you're trying to clean.
$filesToKeep += $MyInvocation.MyCommand.Name
#Loop through all the files in the directory list.
foreach ($file in $dirFiles) {
#If it contains "-Rev-" pull the first part of the file name (up to and including "-Rev-").
$filenameTokenLocation = $file.name.IndexOf("-Rev-")
if ($filenameTokenLocation -ge 0) {
$endOfString = $filenameTokenLocation + 5
$subString = $file.name.Substring(0,$endOfString)
#If the file name part doesn't already exist in the array, add it to it.
if ($uniqueFileNameParts -notcontains $subString) {
$uniqueFileNameParts += $subString
}
}
}
#Loop through all the file name parts.
foreach ($fileName in $uniqueFileNameParts) {
#Create a list of all files starting with that file name part, select the one file with the newest "LastWriteTime" attribute, and assign it to $latest.
$latest = Get-ChildItem -Path $dir | where { ! $_.PSIsContainer } | where { $_.name.StartsWith($fileName) } | Sort-Object LastAccessTime -Descending | Select-Object -First 1
#Add that file to the list of files to keep.
$filesToKeep += $latest.name
}
#Get all files in the folder that are not in the list of files to keep, and remove them.
Get-ChildItem -exclude ($filesToKeep) | where { ! $_.PSIsContainer } | Remove-Item
Notas:
- Ele usa o Último tempo de gravação do arquivo para determinar qual é o "mais recente", os carimbos de data / hora nos próprios nomes dos arquivos não são considerados.
- É sensível a maiúsculas e minúsculas, portanto, um arquivo chamado
XYZ.txt
não é necessariamente o mesmo que um denominadoxYz.TxT
- Não é recursivo, ele apenas verifica a pasta / diretório em que você aponta, ignorando subpastas.
- É perigoso como todos os itens, então faça um backup da pasta antes de tentar. :)
Espero que ajude!