我已经在Windows 7 Professional桌面上configuration了Windows备份和还原function,以便在Windows Server 2012上的networking共享上进行日常备份。(顺便说一句,这个实用程序没有select使用当前login用户的凭据,特别是活动目录用户的凭证,而需要input固定用户的凭证,因此在Active Directory中更改密码时不会更新)。此实用程序也没有任何自动删除旧备份版本的维护机制。 所以会产生大量过时的数据,快速填满服务器的磁盘空间。
现在我在目录结构中有这样的情况(这只对一个用户,但在用户目录中有许多其他用户的文件夹):
Users ├─agnes.microt │ ├─AGNES-PC │ │ ├─Backup Set 2014-02-24 060001 │ │ │ ├─Backup Files 2014-02-24 060001 │ │ │ ├─Backup Files 2014-02-25 091044 │ │ │ ├─Backup Files 2014-02-26 092458 │ │ │ └─Catalogs │ │ └─Backup Set 2014-02-27 091933 │ │ ++ ├─Backup Files 2014-02-27 091933 │ │ ++ └─Catalogs
我想要做的是删除(通过在每日计划的任务中运行一个batch file)所有的“备份集”文件夹,date比一天早,只留下最新的备份设置为每个用户。 这将是简单的,但也有用户几天没有在公司出席。 因此他们的最新备份集应该保留在服务器上,尽pipe它已经过时了。
我做了这么一批:
forfiles /D -1 /PD:\User /M "Backup Set *" /S /C "cmd /c if @ISDIR==TRUE (dir /b /a:d | find /c \"Backup Set\") | (if not %1==\"1\" (rmdir /s /q @file))"
我不知道如何将'dir + find'结果传给后面的'if'命令。
任何帮助将是可观的。 以及关于这个问题/问题的任何其他开放思想的build议。
我认为你最好的选择是循环访问Users
目录,为每个用户找到最新的备份集,然后删除所有其他用户。
这将遍历所有用户 – 然后遍历每个用户的用户username > *-PC
目录首先排序最新的目录 – 离开第一个目录(最新),并删除所有其他。
假设目录结构是Users > username > *-PC
。
setLocal enableDelayedExpansion for /f %%a in ('dir /B /ADD:\Users') ( set cnt=0 set pcdir=D:\Users\%%a for /f %%a in ('dir /B /AD /OD "!pcdir!\*-PC"') do ( if "!cnt!" NEQ "0" echo rmdir /S /Q set /c cnt+=1 ) )
很明显,你需要删除if命令中的echo
– 仅仅为了测试,所以没有实际的目录被删除。
请注意,我目前无法对此进行测试。
好吧,我设法使用PowerShell并基于http://nisanthkv.blog.com/2012/07/30/removing-backup-folders-solution-1
结果如下:
Get-ChildItem MediaID.bin -Path D:\Users -Recurse | ForEach-Object {$_.DirectoryName} | ForEach-Object {Get-ChildItem "Backup Set*" -Path $_ | Sort-Object LastWriteTime -descending | Select-Object -Skip 1 | ForEach-Object {“Removing file $($_.FullName)”; Remove-Item $_.FullName -Recurse -Force}}