2014-02-27 75 views
3

我已經在Windows 7 Professional桌面上配置了Windows備份和還原功能,以便對放置在Windows Server 2012上的網絡共享進行日常備份。(順便提一下,此實用程序沒有選項可以使用當前登錄用戶的憑證,尤其是Active Directory用戶的憑證,而需要輸入固定用戶的憑證,因此在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))" 

我不知道如何通過「目錄+發現」結果「如果」跟隨其後的命令。
任何幫助將是可觀的。以及關於這個問題/問題的任何其他開放思想的建議。

+0

歡迎SO,但我相信你應該在這裏問你的問題在[ServerFault(HTTP: //serverfault.com/about),似乎更適合那裏。 – ztirom

+0

這是一種比平均值更好的方法,這個問題特別關於批處理文件腳本中的語法。恕我直言,它適合S.O.不幸的是,我無法花時間找出答案。使用Unix/Linux工具集會更容易。如果你要做更復雜的事情,安裝Cygwin系統以獲得對bash/ksh/find等的訪問可能是很麻煩的。祝大家好運。 – shellter

+0

用戶(在你的例子中)下的第二個目錄'Users> agnes.microt> AGNES-PC' - 你能否假設每個其他用戶目錄都遵循相同的格式?如果不是,它們是否至少都以'-PC'結尾,如果是,那麼該目錄中是否還有其他文件夾可能以'-PC'結尾? – unclemeat

回答

0

OK,我管理這個使用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}}

0

我認爲您最好的選擇是循環訪問Users目錄,爲每個用戶找到最新的備份集,然後刪除所有其他用戶。

這將遍歷所有用戶 - 然後循環遍歷每個用戶username > *-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 
    ) 
) 

顯然,你需要刪除echo在if命令 - 只是爲了測試所以沒有目錄實際刪除。

請注意,我目前無法對此進行測試。

+0

不幸的是,某些用戶的PC名稱(以及由Windows備份和恢復自動創建的備份目錄名稱)不會以'-PC' 。例如:LICTORALPHA,SAMSUNGBK等 – zdzich