2012-11-15 42 views
0

我正在嘗試編寫一個PowerShell腳本,它將從源文件夾複製文件的子集並將它們放到目標文件夾中。我一直在玩「複製品」和「刪除項目」半天,無法獲得理想的或一致的結果。需要腳本將構建輸出發佈到臨時服務器

例如,當我運行如下命令多次,這些文件最終會在不同的地點:?!?!

copy-item -Path $sourcePath -Destination $destinationPath -Include *.dll -Container -Force -Recurse 

我一直在努力的選擇,我能想到的每一個命令組合但找不到合適的解決方案。由於我確信我沒有做任何非典型的事情,我希望有人能夠緩解我的痛苦,併爲我提供適當的語法來使用。

源文件夾將包含大量具有各種擴展名的文件。例如,所有以下是可能的:

  • 的.dll
  • .dll.config
  • .EXE
  • .exe.config
  • .lastcodeanalysisissucceeded
  • .PDB
  • .Test.dll
  • .vshost.exe
  • .xm升

的腳本需要只複製的.exe,.dll和.exe.config排除任何.test.dll和.vshost.exe文件的文件。我還需要該腳本來創建目標文件夾(如果它們尚不存在)。

任何幫助讓我去是欣賞。

+0

在這裏回答你的問題? http://stackoverflow.com/questions/731752/exclude-list-in-powershell-copy-item-does-not-appear-to-be-working –

+0

不,當我使用接受的答案時,我收到DirectoryNotFound錯誤。錯誤中顯示的路徑是「已加入」的目標路徑。 (注意:路徑不存在,我需要這個腳本來完成) – SonOfPirate

+0

@SonOfPirate你需要在複製之前創建缺少的文件夾。嘗試在我的答案代碼。 –

回答

1

嘗試:

$source = "C:\a\*" 
$dest = "C:\b" 

dir $source -include *.exe,*.dll,*.exe.config -exclude *.test.dll,*.vshost.exe -Recurse | 
% { 

$sp = $_.fullName.replace($sourcePath.replace('\*',''), $destPath) 

if (!(Test-Path -path (split-path $sp))) 
    { 
    New-Item (split-path $sp) -Type Directory 
    } 

    copy-item $_.fullname $sp -force 
    } 
+0

對不起,延遲 - 終於有機會回到這個。它適合我需要的東西!謝謝! – SonOfPirate

0

只要這些文件在一個目錄中,以下應該可以正常工作。它可能比需要更冗長一些,但它應該是一個很好的起點。

$sourcePath = "c:\sourcePath" 
$destPath = "c:\destPath" 

$items = Get-ChildItem $sourcePath | Where-Object {($_.FullName -like "*.exe") -or ($_.FullName -like "*.exe.config") -or ($_.FullName -like "*.dll")} 

$items | % { 
    Copy-Item $_.Fullname ($_.FullName.Replace($sourcePath,$destPath)) 
} 
+0

目標路徑上的DirectoryNotFound錯誤。正如我所說,我需要腳本來創建目標文件夾,如果它們不存在。它似乎沒有發生。 – SonOfPirate