Windows 网络共享上的桌面备份维护
我已在Windows 7 Professional桌面上配置Windows备份和还原功能,以便在Windows Server 2012上的网络共享上进行每日备份。(顺便说一句,遗憾的是,此实用程序没有使用当前登录用户凭据(尤其是Active Directory用户凭据)的选项。相反,必须输入固定用户凭据。因此,在Active Directory中更改密码时,密码不会更新。)此实用程序也没有任何自动删除旧备份版本的维护机制。因此,它会产生大量过时的数据,很快填满服务器的磁盘空间。Windows 网络共享上的桌面备份维护,windows,batch-file,command-line,cmd,backup,Windows,Batch File,Command Line,Cmd,Backup,我已在Windows 7 Professional桌面上配置Windows备份和还原功能,以便在Windows Server 2012上的网络共享上进行每日备份。(顺便说一句,遗憾的是,此实用程序没有使用当前登录用户凭据(尤其是Active Directory用户凭据)的选项。相反,必须输入固定用户凭据。因此,在Active Directory中更改密码时,密码不会更新。)此实用程序也没有任何自动删除旧备份版本的维护机制。因此,它会产生大量过时的数据,很快填满服务器的磁盘空间。 现在我在目录结构
现在我在目录结构中遇到了这种情况(这只针对一个用户,但在“用户”目录中有许多其他用户的文件夹): 我要做的是删除(通过在每日计划任务中运行批处理文件)所有日期早于一天的“备份集”文件夹,只为每个用户保留最新的备份集。这将很简单,但也有一些用户几天不在公司。因此,他们的最新备份集应该保留在服务器上,尽管它已经过时。
我做了这样一批:
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'命令。任何帮助都是值得的。以及与此问题相关的任何其他开放式建议。我认为您最好的选择是循环浏览
用户
目录,为每个用户找到最新的备份集,然后删除所有其他备份集
这将遍历所有用户-然后遍历每个用户用户名>*-PC
首先按最新目录进行目录排序-离开第一个目录(最新目录),然后每隔一个目录删除一个目录
假设目录结构是Users>username>*-PC
setLocal enableDelayedExpansion
for /f %%a in ('dir /B /A D D:\Users') (
set cnt=0
set pcdir=D:\Users\%%a
for /f %%a in ('dir /B /A D /O-D "!pcdir!\*-PC"') do (
if "!cnt!" NEQ "0" echo rmdir /S /Q
set /c cnt+=1
)
)
显然,您需要删除if命令中的echo
,这只是为了测试,这样实际上就不会删除任何目录
请注意,我目前无法对此进行测试 好的,我使用PowerShell并基于
结果如下:
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}
欢迎来到SO,但是我相信你应该在这里问你的问题,在那里似乎更合适。这是一个比一般的第一个问题更好的方法,问题是关于批处理文件脚本中的语法。我认为这对S.O.是合适的。不幸的是,我不能花时间找出答案。使用Unix/Linux工具集,这将容易得多。如果你打算做这么复杂的事情,那么安装Cygwin系统以获得对bash/ksh/find等的访问可能是值得的。祝大家好运。第二个目录位于users(在你的示例中)users>agnes.microt>agnes-PC
-你能假设其他用户目录都遵循相同的格式吗?如果不是,它们是否至少都以-PC
结尾,如果是,该目录中是否还有其他文件夹也可能以-PC
结尾?@ztirom正如您所建议的那样,我也在服务器上问了我的问题:不幸的是,有些用户的电脑名(因此,Windows备份和还原自动创建的备份目录名)不会以“-PC”结尾。例如:LICTORALPHA、SAMSUNGBK等。
setLocal enableDelayedExpansion
for /f %%a in ('dir /B /A D D:\Users') (
set cnt=0
set pcdir=D:\Users\%%a
for /f %%a in ('dir /B /A D /O-D "!pcdir!\*-PC"') do (
if "!cnt!" NEQ "0" echo rmdir /S /Q
set /c cnt+=1
)
)