2016-01-19 89 views
0

我需要一些PowerShell的幫助。我的經驗是非常有限的,因爲我是一個SQL服務器DBA。我目前所做的是將數據庫從2000年遷移到2008年。我希望自動化從源到目標的.bak副本,因此我不需要進入每個文件夾並複製然後粘貼。所以讓我給出這張照片。源目錄包含文件夾a b c d。我希望腳本從每個文件夾中讀取,或理想地指定文件夾名稱,並按日期獲取最近的 .Bak完整備份並複製到目標。目的地將具有相同的文件夾,因此將文件夾a的備份複製到目標文件夾a會很好。之後我想要做同樣的事情,但將搜索從完全備份搜索更改爲差異。任何幫助表示讚賞。從文件夾複製最近的文件到目的地

回答

0

這就是我將要解決的問題。文件夾路徑和目標路徑的變量是根文件夾,子文件夾的變量列出要搜索的每個文件夾。

Clear-Host 
$ChildFolders = @('A', 'B') 

for($i = 0; $i -lt $ChildFolders.Count; $i++){ 

    $FolderPath = "D:\BackupSource\" + $ChildFolders[$i] 
    $DestinationPath = "D:\BackupDestination\" + $ChildFolders[$i] 

    gci -Path $FolderPath -File | Sort-Object -Property LastWriteTime - Descending | Select FullName -First 1 | %($_){ 
    $_.FullName 
    Copy-Item $_.FullName -Destination $DestinationPath 
    } 

} 
0

鑑於此結構,即所有文件夾都存在。

├───destination 
│ ├───A 
│ └───B 
└───source 
    ├───A 
    └───B 

你可以做到以下幾點:

$folders = @('A', 'B') 
$source = 'source' 
$destination = 'destination' 
$filter = '*.bak' 

$folders | foreach { 
    $source_path = [io.path]::combine($source, $_) 
    $destination_path = [io.path]::combine($destination, $_) 
    gci $source_path -File -Filter $filter | sort -Property LastWriteTime -Descending | 
     Select -first 1 | copy -Destination $destination_path 
} 

它得到符合過濾器的所有文件,在通過LastWriteTime降序對其進行排序,挑選最新的,並將其複製到你的目的地。

相關問題