“Excluir arquivos mais antigos que” script em lote

8

Assim, no trabalho de fazer backups, eu preciso de um script em lote que me permita excluir arquivos em um diretório especificado, que são mais antigos do que digamos, três dias. Esse script será definido como uma tarefa agendada para ser executada em um horário especificado todos os dias.

    
por Chiggins 14.04.2011 / 17:37

8 respostas

8

Se o powershell for aceitável (deve ser, como está ativado por padrão no Server 2008+), tente isto:

$numberOfDays = 3
$Now = Get-Date
$TargetFolder = “C:\myoldfiles”
$LastWrite = $Now.AddDays(-$numberOfDays)
$Files = get-childitem $TargetFolder -include *.bak, *.x86 -recurse | Where {$_.LastWriteTime -le “$LastWrite”} 

foreach ($File in $Files)
{
    write-host “Deleting File $File” -foregroundcolor “Red”;
    Remove-Item $File | out-null
} 

Souce aqui .

    
por 14.04.2011 / 17:44
13
forfiles -p c:\pathtofiles\ -m *.rar -d -5 -c "cmd /c del @path"

Onde -5 é a idade dos arquivos que você deseja excluir (cinco dias ou mais neste caso). Este script está excluindo .rar files - elimine o -m *.rar se você quiser excluir qualquer tipo de arquivo.

    
por 12.05.2011 / 11:16
3

Se você insistir em usar arquivos em lote, o Robocopy.exe é sua resposta. É rápido (multithreaded) e muito robusto. Para o seu cenário, você pode usar o seguinte como um guia:

:: Moves dir & files older than 3 days to i:\Destination
:: Wildcards acceptable
robocopy i:\Source\ i:\Destination\ /MOVE /MIR /MINAGE:3 /ETA
:: Removes the destination tree
rd /s /q i:\destination

Existe uma longa lista de opções, por favor, faça o robocopy /? para ver todos eles. Você pode até usá-lo para fazer backups incrementais, agendar, criar perfis de backup, etc.

    
por 12.05.2011 / 09:49
2

Eu gosto de usar o DelEn.exe para isso.

Delen - DELete Enhanced - é uma versão simplificada do DEL. Ele suporta curingas estendidos e diretórios pai, bem como filtros de data, hora e tamanho. Os arquivos podem ser excluídos da exclusão.

    
por 15.04.2011 / 14:18
2

Você pode ver o DelAge32 de Horst Schaeffer:

link

DelAge32 - ver. 2.3 (c) 2003-2008, Horst Schaeffer
Deletes or moves files (path with file pattern) by age (number of days)
Syntax:  DelAge32 filespec age [options]
Options:
  /created /accessed /modified (default) - file stamp used to evaluate age
  /includeRO - include read-only files
  /includeH  - include hidden files
  /includeS  - include system files
  /includeRHS -include read-only, hidden and system files
  /recurse   - include subdirectories
  /subonly   - /recurse excluding initial directory
  /rd        - remove empty subdirectories
  /move path - move files to specified path
  /preview   - list, but no action
  /quiet     - no output

Seu comando pode ser tão simples quanto:

delage32.exe c:\logdirectory\*.log 3

Eu tenho este comando em execução como uma tarefa agendada.

    
por 20.04.2011 / 23:45
1

Este é um script do powershell que eu escrevi para fazer o que você quer - ele faz um pouco mais também. Eu uso para limpar logs e outros arquivos temporários.

purge-dem-logs.cmd

powershell.exe -command "& 'c:\purgelogs\purgelogs.ps1' -Filepath D:\SQL\backup\ -filemask *.bak -Maxdays 14 "

purgelogs.ps1:

Param ($filepath, $filemask, $maxdays, [switch]$recurse)

   if (($FilePath -eq $null) -or ($FileMask -eq $null) -or ($MaxDays -eq $null)) {
      write-host "Usage .\purgelogs.ps1 -filepath [Path] -filemask [Mask] -masdays [Max Days]"
      write-host " "
      write-host "Example: "
      write-host "    .\purgelogs.ps1 -filepath c:\temp -filemask *.log -maxdays 30"
      break
      }

   if (Test-Path $FilePath) {

      $FilePath += "*"

      $Now = Get-Date

      $LastWrite = $Now.AddDays(-$MaxDays)

      write-host "Last write time " $LastWrite
      if ($recurse) {
         $Files = get-childitem $FilePath -include $FileMask -recurse | Where {$_.LastWriteTime -le "$LastWrite"}
      } else {
         $Files = get-childitem $FilePath -include $FileMask | Where {$_.LastWriteTime -le "$LastWrite"}
      }

      if ($Files -eq $null) {

         write-host "No matching files found"

      } else {

          foreach ($File in $Files)
            #You can add -whatif to see the consequence û Remove-item $File -Whatif
            {
            write-host "Deleting File $File" -foregroundcolor "Red"; Remove-Item $File | out-null
            }
         }
      }
   Else
      {
      Write-Host "The Folder $FilePath Does Not Exist!"
      }
    
por 15.04.2011 / 13:36
1

Isso não funcionará para computadores remotos. Os administradores precisam gerenciar vários computadores. Abaixo está o script que pode ser usado para excluir pastas em vários computadores remotos sem precisar fazer login.

Abaixo, o script excluirá pastas com mais de 15 dias. você pode mudar o parâmetro $ days embora.

D $ \ Arquivos de programas (x86) \ Research In Motion \ O BlackBerry Enterprise Server \ Logs é o caminho UNC da pasta Blackberry Log. Você pode alterar o diretório onde seus logs / pastas estão localizados.

Liste todos os nomes dos servidores no arquivo servers.txt e ele deve estar localizado no mesmo diretório que este script.

cd C:\Scripts\Powershellscripts\deletefiles ----> change it to the directory you wanna out this script to

$Days = "15" 
$Now = Get-Date
$LastWrite = $Now.AddDays(-$days)
$server = get-content servers.txt
foreach ($node in $server)
{
get-childitem -recurse "\$node\D$\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\Logs" | Where-Object {$_.LastWriteTime -le $LastWrite} | remove-item -recurse -force
}

Salve o script como .ps1 e execute-o. Você pode agendar via arquivo de lote. Dessa forma, você precisa adicionar o comando Alterar Diretório no início do script.

Divirta-se.

    
por 20.02.2012 / 18:15
0

Como uma abordagem alternativa: em vez de depender de consultar o sistema de arquivos para obter tempos de criação de arquivos (e atingir os mesmos arquivos em vários dias, até que eles expirem) você pode adicionar o arquivo a um índice próprio no momento da criação. O índice poderia ser tão simples quanto um arquivo com o nome da data de criação, armazenado em um local conhecido, com um arquivo por linha.

Se você tiver um aplicativo multithread / multiprocess que cria arquivos, talvez queira que seu índice seja tratado de maneira mais sofisticada.

A vantagem é que você sempre tem uma lista de arquivos relativamente simples, criada em um determinado dia, sobre a qual você pode iterar, em vez de ter que perguntar ao sistema de arquivos várias vezes para obter detalhes.

(Isso depende do aplicativo e da criação de arquivos, gerenciados por você e não por terceiros).

    
por 25.03.2015 / 16:10