如何排除文件夾?現在我硬編碼的文件夾名稱,但我希望它更靈活。Powershell - 排除Get-ChildItem中的文件夾
foreach($file in Get-ChildItem $fileDirectory -Exclude folderA,folderb)
如何排除文件夾?現在我硬編碼的文件夾名稱,但我希望它更靈活。Powershell - 排除Get-ChildItem中的文件夾
foreach($file in Get-ChildItem $fileDirectory -Exclude folderA,folderb)
「如何排除文件夾?」 ,如果你的意思是所有的文件夾:
get-childitem "$fileDirectory\\*" -file
但它只適用於$ fileDirectory的第一級。 這工作recursevly:
Get-ChildItem "$fileDirectory\\*" -Recurse | ForEach-Object { if (!($_.PSIsContainer)) { $_}}
或
Get-ChildItem "$fileDirectory\\*" -Recurse | where { !$_.PSisContainer }
您可以通過使用管道和Where-Object
過濾器來完成此操作。
首先,迭代PowerShell中一組文件的慣用方法是將Get-Childitem
修改爲Foreach-Object
。所以重寫您的命令:
Get-ChildItem $fileDirectory | foreach {
$file = $_
...
}
使用管道的好處是,現在你可以在之間插入其他的cmdlet。具體來說,我們使用Where-Object
來過濾文件列表。僅當過濾器不包含在給定數組中時,過濾器纔會傳遞文件。
$excludelist = 'folderA', 'folderB'
Get-Childitem $fileDirectory |
where { $excludeList -notcontains $_ } |
foreach {
$file = $_
...
}
如果你要使用這個有很多,你甚至可以編寫自定義過濾器功能傳遞給foreach
之前修改以任意方式的文件列表。
filter except($except, $unless = @()) {
if ($except -notcontains $_ -or $unless -contains $_){
$_
}
}
$excludelist = 'folderA', 'folderB'
$alwaysInclude = 'folderC', 'folderD'
Get-ChildItem $fileDirectory |
except $excludeList -unless $alwaysInclude |
foreach {
...
}
如果我沒有錯,這仍然需要指定要排除的文件夾名稱。示例如果我有100個文件夾,我需要指定它們中的每一個100次。現在我想跳過這個手動過程 – user664481
您需要建立一個文件夾列表來排除這種或那種方式,無論是手動執行還是運行不同的'Get-ChildItem'命令。這取決於您如何選擇要排除的文件夾。 –
@dvjz說-file只能在一個文件夾中的第一級,但不遞歸。但它似乎爲我工作。
get-childitem "$fileDirectory\\*" -file -recurse
您的意思是排除* all *文件夾嗎?或者只是你選擇的那些? –