如何排除文件夹?现在我硬编码文件夹名称,但我希望它更灵活。
foreach($file in Get-ChildItem $fileDirectory -Exclude folderA,folderb)
7kjnsjlb1#
“如何排除文件夹?”,如果您指的是所有文件夹:
get-childitem "$fileDirectory\\*" -file
但它只适用于$fileDirectory的第一级。这是递归工作的:
Get-ChildItem "$fileDirectory\\*" -Recurse | ForEach-Object { if (!($_.PSIsContainer)) { $_}}
或
Get-ChildItem "$fileDirectory\\*" -Recurse | where { !$_.PSisContainer }
f5emj3cl2#
您可以通过使用管道和Where-Object过滤器来实现这一点。首先,在PowerShell中迭代一组文件的惯用方法是通过管道将Get-Childitem传递给Foreach-Object。因此,重写命令会得到以下结果:
Where-Object
Get-Childitem
Foreach-Object
Get-ChildItem $fileDirectory | foreach { $file = $_ ... }
使用管道的好处是,现在您可以在其间插入其他cmdlet。具体地说,我们使用Where-Object来过滤文件列表。仅当文件不包含在给定的数组中时,筛选器才会传递该文件。
$excludelist = 'folderA', 'folderB' Get-Childitem $fileDirectory | where { $excludeList -notcontains $_ } | foreach { $file = $_ ... }
如果您要经常使用它,您甚至可以编写一个定制的Filter函数,在传递给foreach之前以任意方式修改文件列表。
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 { ... }
kuhbmx9i3#
@dvjz说,-file只在文件夹的第一级工作,不能递归工作。但它似乎对我很管用。
get-childitem "$fileDirectory\\*" -file -recurse
cwdobuhd4#
对于未来的Googler,我发现文件有一个名为PSIsContainer的属性,当它们是一个目录时,它就是$true。列出$fileDirectory中所有文件的命令为:
PSIsContainer
$true
$fileDirectory
foreach ($file in Get-ChildItem $fileDirectory | Where-Object -Property PSIsContainer -eq $false) { Write-Host $file.Name }
请注意,-Property对于cmdlet Where-Object是可选的。
-Property
oxcyiej75#
递归排除文件夹的最简单方法是:
foreach($file in Get-ChildItem $fileDirectory -Exclude {Get-ChildItem folderA},{Get-ChildItem folderB})
在哪里:
folderA
folderB
5条答案
按热度按时间7kjnsjlb1#
“如何排除文件夹?”,如果您指的是所有文件夹:
但它只适用于$fileDirectory的第一级。这是递归工作的:
或
f5emj3cl2#
您可以通过使用管道和
Where-Object
过滤器来实现这一点。首先,在PowerShell中迭代一组文件的惯用方法是通过管道将
Get-Childitem
传递给Foreach-Object
。因此,重写命令会得到以下结果:使用管道的好处是,现在您可以在其间插入其他cmdlet。具体地说,我们使用
Where-Object
来过滤文件列表。仅当文件不包含在给定的数组中时,筛选器才会传递该文件。如果您要经常使用它,您甚至可以编写一个定制的Filter函数,在传递给
foreach
之前以任意方式修改文件列表。kuhbmx9i3#
@dvjz说,-file只在文件夹的第一级工作,不能递归工作。但它似乎对我很管用。
cwdobuhd4#
对于未来的Googler,我发现文件有一个名为
PSIsContainer
的属性,当它们是一个目录时,它就是$true
。列出$fileDirectory
中所有文件的命令为:请注意,
-Property
对于cmdletWhere-Object
是可选的。oxcyiej75#
递归排除文件夹的最简单方法是:
在哪里:
$fileDirectory
-搜索文件夹folderA
、folderB
-排除的文件夹