我已经在 Windows 7 Professional 桌面上配置了 Windows 备份和还原功能,以便在 Windows Server 2012 上的网络共享上进行每日备份。(顺便说一句,遗憾的是,该实用程序没有使用当前登录用户凭据的选项,尤其是 Active目录用户的凭据。相反,必须输入固定用户的凭据。因此,在 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
我想要做的是删除(通过在每日计划任务中运行批处理文件)所有日期早于一天的“备份集”文件夹,只为每个用户留下最新的备份集。这很简单,但也有几天不在公司的用户。因此,他们最新的备份集应该保留在服务器上,尽管它已经过时。
我做了这么一批:
forfiles /D -1 /P D:\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”命令。
任何帮助都是不言而喻的。以及有关此问题/问题主题的任何其他开放思想建议。
我只是问操作系统哪个目录是最新的,然后从那里开始。
批处理(笨重,但它起作用——它通过从最旧到最新排序来找到最新的,将文件夹移动到临时目录,将最新的移回,然后删除临时目录):
PowerShell(查找最新目录,删除不是最新的目录):
好的,我设法使用 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}}