網路共享上的桌面備份維護
我已經在 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 並基於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}}
我只是問作業系統哪個目錄是最新的,然後從那裡開始。
批處理(笨重,但它起作用——它通過從最舊到最新排序來找到最新的,將文件夾移動到臨時目錄,將最新的移回,然後刪除臨時目錄):
FOR /F " tokens=*" %%i IN ('dir "c:\temp\backup*" /b /ad-h /od') DO (SET a=%%i) mkdir temp FOR /F " tokens=*" %%i IN ('dir /b /ad-h /od') DO (move "%%i" temp) cd temp move "%a%" .. cd .. rd /s /q temp
PowerShell(查找最新目錄,刪除不是最新的目錄):
$latest = get-childitem c:\temp\backup* | ? { $_.PSIsContainer } | sort CreationTime -desc | select -f 1 Get-ChildItem -Path 'C:\temp\backup*' -Recurse | ? { $_.PSIsContainer } | Select -ExpandProperty FullName | Where {$_ -notlike $latest} |sort length -Descending | Remove-Item -force