2013-07-22 133 views
0

我正在嘗試做一些非常奇怪的事情。任何替代解決方案都可以分析,但我工作的過程非常難以改變。遞歸比較兩個文件夾並保存重複文件

我有一個文件夾可以在IIS Web服務器上部署。該文件夾可以包含任何文件,如dll,asmx,web.config,.exe等。我們有一個bat腳本來執行完整備份,但是由於這個原因,一個簡單的文件部署可能會持續一個小時。

我想要一些實用程序或使PowerShell腳本比較要與目標文件夾進行部署的文件夾,並僅備份第一個文件夾上具有相同文件的文件(或文件夾)。這必須以遞歸方式完成,並且還必須在目標服務器中保留文件夾結構。

編輯:我目前工作的一個PowerShell腳本,將是這樣的(我絕對不是一個PowerShell的專家):

Compare-Object $d1 $d2 | Where-Object {$_.SideIndicator -ne "=>" -and $_.InputObject -ne "*.ok*" -and $_.InputObject -ne "*.bat*" } 

任何幫助或建議,將不勝感激! Regards

+0

您的意思是說您要備份源文件夾樹中的所有文件,但忽略目標文件夾樹中尚不存在的任何額外文件?什麼是兩條路? – foxidrive

+0

我想要備份將被源文件夾中的文件替換的目標文件夾樹中的所有文件。我知道這些文件將被替換,因爲它們在源文件夾中具有相同的名稱。 實施例: - 源:C:\部署\應用\ crm.exe - DEST:C:\ web應用\應用\ crm.exe \t \t C:\ web應用\應用\ pay.exe \t \t (僅備份目標中的crm.exe) –

回答

0

你將無法使用比較對象來維護文件結構...我無聊,所以在這裏你去。

$sPath = "C:\test\" 
$dPath = "C:\test2\" 
$src = gci -recurse $sPath 
$dest = gci -recurse $dPath 
$src | % { 
    foreach($item in $dest) { 
     $t1 = ($item.FullName).trimStart($dpath) 
     $t2 = ($_.FullName).trimStart($sPath) 
     if($t1 -eq $t2) {copy-item $item.FullName $_.FullName -Force} 
    } 
} 

只需將$ spath設置爲src目錄並將$ dPath設置爲您的部署目錄,並讓她翻錄即可。

+0

感謝您的回答Cole9350。由於性能問題,我不會使用它。對目標文件夾進行完整備份會更快,因爲它非常大。 –

+0

好可以理解。不幸的是我沒有辦法做到這一點,以達到比O(n^2)更好的效率。對於我來說,確實有一種方法但是太複雜了:D – Cole9350

+0

Hehe,謝謝。我正在開始學習c#,只是爲了做到這一點:( –

相關問題