Windows 网络共享上的桌面备份维护

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中更改密码时,密码不会更新。)此实用程序也没有任何自动删除旧备份版本的维护机制。因此,它会产生大量过时的数据,很快填满服务器的磁盘空间。 现在我在目录结构

我已在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
    )
)