2014-03-18 106 views
-1

使用powershell我想搜索多個目錄中包含1個名爲incoming的文件夾的子文件夾數組,並將文件從傳入文件移動到臨時區域使用相同的文件夾名稱作爲其來源。將子文件夾陣列中的文件移動到具有相同陣列名稱的新目錄中

IE:文件到文件夾中是這樣的:

Z:\文件夾1 \進入\文件*,Z:\文件夾2 \進入\文件*,Z:\ folder3 \ SUB1 \進入\文件。 *,Z:\ folder3 \ SUB2 \來電\文件*等

然後將需要使用相同的文件夾結構被移動到一個臨時區域:

\ NAS \分期\ folder1中\來電\文件*,\ nas \ staging \ folder2 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub1 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub2 \ incoming \ file。*等

基本上我想從中提取的唯一子文件夾是包含帶有文件的「傳入」文件夾的文件夾。由於沒有預定義的文件夾名稱,除了子文件夾「Incoming」,我需要遍歷Z:內的每個文件夾。

任何幫助或建議將不勝感激。

我能夠想出這個辦法,將不包括「傳出」的文件夾結構有情調地移動到暫存目錄中,但是在我的環境中,會有許多排除項來檢查這種方式。如果需要,還有機會將文件從列表中移動到特定文件夾?

$from = 'C:\ftp' 
$to = 'C:\staging' 

$excludeMatch = @("Outgoing") 
Get-ChildItem -Path $from -Recurse -Exclude $exclude | 
     where { $excludeMatch -eq $null -or $_.FullName.Replace($from, "") -notmatch $excludeMatch } | 
     Copy-Item -Destination { 
     if ($_.PSIsContainer) { 
      Join-Path $to $_.Parent.FullName.Substring($from.length) 
     } else { 
      Join-Path $to $_.FullName.Substring($from.length) 
     } 
     } -Force -Exclude $exclude 
+0

到目前爲止您嘗試過什麼?這是PowerShell的一個相當簡單的任務,但這裏的人不會爲你編寫整個腳本。 – alroc

+0

使用Robocopy可能會更好地解決這個問題。 Robocopy可以基於名稱匹配模式複製文件並維護目錄結構。 – alroc

回答

0

Sooooo,我們需要的是,確定父目錄被稱爲「傳入」的任何文件?至少有兩種方法可以解決這個問題,但我可能會遇到一種整潔,更加習慣的解決方案。

方法1 - 確定 '進入' 文件夾,然後複製內容

 
get-childitem -Path $from -recurse -Filter "incoming" | 
    where-object { $_.PSIsContainer } 

如果你正在使用PowerShell的3,我相信(讀 '未經測試'),這可以縮短到

 
get-childitem -Path $from -recurse -Filter "incoming" -Directory 

以上任何一種都會導致一系列'目錄'對象,所有這些都是'傳入'文件夾。對於每一個,將文件複製到適當的目的地。

方法2 - 確定所有文件,然後處理這些衛生組織文件夾是「進入的」

 
get-childitem -path $from -recurse | 
    where-object { -not $_.PSIsContainer } | 
    where-object { (Split-Path $_.Directory -Leaf) -eq "incoming" } 

這導致在「文件」的對象,所有這些都是一個稱爲文件夾中的一個流「傳入」 。對於每一個,複製到適當的目的地。

+0

謝謝你生病給我一個嘗試。 – Mongony

+0

@Monyony - 爲你做了這個工作嗎? – andyb

+0

是的,幫了我,謝謝。 – Mongony

相關問題