-Exclude
是好的但它不具備文件夾名稱\路徑排除有良好記錄的文件名。您應該使用Where-Object
子句來解決這個問題。
$Files = Get-ChildItem -Path "D:\depot\main" -Recurse -Include "*.exe" -Exclude "HWEMNGR.EXE","wmboot.exe","SDClientMobileEdition.exe" |
Select-Object -ExpandProperty FullName |
Where-Object{$_ -notmatch "\\FolderName\\"}
的片段% { $_.FullName }
被Select-Object -ExpandProperty FullName
它做同樣的事情所取代。然後我們使用Where-Object
來排除FolderName不存在的路徑。這是基於正則表達式,所以我們在斜線上加倍。這也有助於確保我們排除的文件夾,而不是可能被稱爲「FolderName.exe」
替代方法
像TheMadTechnician指出,你可以從另一個方向來到這,只是確保文件的文件來自你真正關心的唯一兩個文件夾。 Get-ChildItem
將採取一個數組的路徑,所以你也可以使用這樣的東西。
$paths = "D:\depot\main\install","D:\depot\main\debug"
$excludes = "HWEMNGR.EXE","wmboot.exe","SDClientMobileEdition.exe"
$Files = Get-ChildItem $paths -Filter "*.exe" -Exclude $excludes | Select-Object -ExpandProperty FullName
$paths
是您想要的結果的唯一兩個文件夾。你仍然排除你不想要的文件,然後返回完整的文件路徑。
由於事實上你必須得到一切,然後排除,如果它只有2個子文件夾,他想要得到根文件夾可能會更快,然後得到他想要遞歸的2個子文件夾。這樣他沒有得到第三個文件夾的內容,然後排除它。對於像這樣的小套件,有時候最後一點額外的工作是值得的。 – TheMadTechnician 2015-01-09 21:01:12
@TheMadTechnician根據您的評論提供了一條建議。假設我明白..... – Matt 2015-01-09 21:08:55
是的,看起來是正確的。可能希望在路徑中包含「D:\ Depot \ Main」。 – TheMadTechnician 2015-01-09 21:46:55