Назад | Перейти на главную страницу

Пакетный скрипт «Удалить файлы старше»

Поэтому при выполнении резервного копирования мне нужен пакетный сценарий, который позволил бы мне удалять файлы в указанном каталоге, которые старше, чем, скажем, 3 дня. Этот сценарий будет установлен как запланированная задача, которая будет запускаться в указанное время каждый день.

forfiles -p c:\pathtofiles\ -m *.rar -d -5 -c "cmd /c del @path"

куда -5 - это возраст файлов, которые вы хотите удалить (в данном случае 5 дней или старше). Этот скрипт удаляет .rar файлы - отбросьте -m *.rar если вы хотите удалить любой тип файла.

Если Powershell приемлем (должен быть, поскольку он включен по умолчанию на Server 2008+), попробуйте следующее:

$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
} 

Соус Вот.

Если вы настаиваете на использовании пакетных файлов, Robocopy.exe - ваш ответ. Его быстрый (многопоточный) и очень надежный. Для вашего сценария вы можете использовать следующее в качестве руководства:

:: 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

Есть длинный список вариантов, пожалуйста, сделайте robocopy /? чтобы увидеть их всех. Вы даже можете использовать его для инкрементного резервного копирования, планирования, создания профилей резервного копирования и т. Д.

Я люблю использовать DelEn.exe для этого.

Delen - DELete ENhanced - это расширенная версия DEL. Он поддерживает расширенные подстановочные знаки и родительские каталоги, а также фильтры даты, времени и размера. Файлы можно исключить из удаления.

Вы можете посмотреть на DelAge32 Хорста Шеффера:

http://home.mnet-online.de/horst.muc/wbat32.htm#top

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

Ваша команда может быть такой простой, как:

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

У меня эта команда запущена как запланированная задача.

Это сценарий PowerShell, который я написал для того, чтобы делать то, что вы хотите, - он делает немного больше. Я использую его для очистки журналов и других временных файлов.

очистить-дем-журналыs.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!"
      }

Это не сработает для удаленных компьютеров. Администраторам необходимо управлять несколькими компьютерами. Ниже приведен сценарий, который можно использовать для удаления папок на нескольких удаленных компьютерах без необходимости входа в них.

Ниже скрипт удалит папки старше 15 дней. вы можете изменить параметр $ days.

D $ \ Program Files (x86) \ Research In Motion \ BlackBerry Enterprise Server \ Logs - это UNC-путь к папке Blackberry Log. Вы можете изменить каталог, в котором расположены ваши журналы / папки.

Перечислите все имена ваших серверов в файле servers.txt, и он должен находиться в том же каталоге, что и этот скрипт.

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
}

Сохраните сценарий как .ps1 и запустите его. Вы можете запланировать это через командный файл. Таким образом, вам нужно добавить команду «Изменить каталог» в начало скрипта.

Радоваться, веселиться.

В качестве альтернативного подхода: вместо того, чтобы полагаться на запросы файловой системы, чтобы получить время создания файла (и использовать одни и те же файлы в течение нескольких дней, пока они не истекут), вы можете добавить файл в свой собственный индекс во время создания. Индекс потенциально может быть таким же простым, как файл, названный по дате создания, хранящийся в известном месте, с файлом в каждой строке.

Если у вас есть многопоточное / многопроцессорное приложение, создающее файлы, вы можете захотеть, чтобы ваш индекс обрабатывался более сложным способом.

Преимущество состоит в том, что у вас всегда есть относительно легко обрабатываемый список файлов, созданных в определенный день, который вы можете перебирать, вместо того, чтобы снова и снова запрашивать подробности у файловой системы.

(Это будет зависеть от приложения и создания файла, которые управляются вами, а не третьей стороной).