Поэтому при выполнении резервного копирования мне нужен пакетный сценарий, который позволил бы мне удалять файлы в указанном каталоге, которые старше, чем, скажем, 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 и запустите его. Вы можете запланировать это через командный файл. Таким образом, вам нужно добавить команду «Изменить каталог» в начало скрипта.
Радоваться, веселиться.
В качестве альтернативного подхода: вместо того, чтобы полагаться на запросы файловой системы, чтобы получить время создания файла (и использовать одни и те же файлы в течение нескольких дней, пока они не истекут), вы можете добавить файл в свой собственный индекс во время создания. Индекс потенциально может быть таким же простым, как файл, названный по дате создания, хранящийся в известном месте, с файлом в каждой строке.
Если у вас есть многопоточное / многопроцессорное приложение, создающее файлы, вы можете захотеть, чтобы ваш индекс обрабатывался более сложным способом.
Преимущество состоит в том, что у вас всегда есть относительно легко обрабатываемый список файлов, созданных в определенный день, который вы можете перебирать, вместо того, чтобы снова и снова запрашивать подробности у файловой системы.
(Это будет зависеть от приложения и создания файла, которые управляются вами, а не третьей стороной).