2017-03-23 101 views
1

我想要獲取同一根文件夾下的子文件夾中的所有文件,它們都包含子文件夾名稱中相同的字符串(「foo」)。下面給我沒有錯誤,沒有輸出。我不知道我錯過了什麼。獲取包含其名稱中的字符串的子文件夾的內容

Get-ChildItem $rootfolder | where {$_.Attributes -eq 'Directory' -and $_.BaseName -contains 'foo'}) | echo $file 

最後,我想不只是附和他們的名字,但每個文件移動到目標文件夾。

謝謝。

回答

1

這裏是包括每個文件夾的子文件移動到一個新的目標文件夾的解決方案:

$RootFolder = '.' 
$TargetFolder = '.\Test' 

Get-ChildItem $RootFolder | Where-Object {$_.PSIsContainer -and $_.BaseName -match 'foo'} | 
    ForEach-Object { Get-ChildItem $_.FullName | 
    ForEach-Object { Move-Item $_.FullName $TargetFolder -WhatIf } } 

刪除-WhatIf當你快樂時它做它應該是什麼。

如果您(例如)想要排除文件夾的子目錄,或者要將子項包括在這些路徑的所有子文件夾中,但不包括文件夾本身,則可能需要修改Get-ChildItem $_.FullName部分。

+0

..我嘗試了一切,但那。謝謝。 – physlexic

0

更換

Get-ChildItem $rootfolder | where {$_.Attributes -match 'Directory' -and $_.basename -Match 'foo'}) | echo $file 

Get-ChildItem $rootfolder | where {($_.Attributes -eq 'Directory') -and ($_.basename -like '*foo*')} | Move-Item $targetPath 

您的要求:

,所有包含相同的字符串( 「富」)

您必須使用-like比較運算符。對於完全匹配,我將使用-eq(區分大小寫的版本是-ceq)而不是-match,因爲它用於匹配子字符串和模式。

工作流程: 獲取目錄中的所有文件,通過管道將其發送到您的基於性能的濾波凡對象cmdlet屬性和基名。過濾完成後,將其發送到cmdlet Move-Item。

+0

謝謝..但這會移動子文件夾和內容..我只是想要移動每個子文件夾的內容 – physlexic

+0

'Get-ChildItem $ rootfolder -File -Recurse |其中{$ _。basename-like'* foo *'} | Move-Item $ targetPath'試試這個。您必須首先獲取所有文件(不包括文件夾),然後對其進行過濾。讓我知道這是否有效,並用解釋來更新答案。 「ForEach」 – pandemic

0

將前兩個變量適應您的環境。

$rootfolder = 'C:\Test' 
$target = 'X:\path\to\whereever' 
Get-ChildItem $rootfolder -Filter '*foo*' | 
    Where {$_.PSiscontainer} | 
    ForEach-Object { 
     "Processing folder: {0} " -f $_ 
    Move $_\* -Destination $target 
    } 
相關問題