仅输出文件夹并排除特定文件夹

时间:2013-04-01 16:23:23

标签: powershell recursion dir

我有一个包含超过10TB数据的数据库,需要组织数据。我这样做是通过使用Powershell仅将文件夹输出到文本文件,然后将其导入excel进行进一步处理。我只想要说Z驱动器的文件夹和子文件夹。我不想要任何文件。当我尝试排除某些文件夹及其中的所有子文件夹时,我遇到了问题。

例如,我想要排除的文件夹名称及其内容是“BackScatter”和“MicroData”。 我正在使用这个脚本:

dir -recurse -Exclude "Backscatter","MicroData" | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.FullName } > ZDrive.txt

我没有收到错误,只是在递归时不会排除这些文件夹。

此外,我想知道是否可以在“Backscatter”中排除子文件夹而不是整个文件夹。我在网站上做了很多搜索,但我很新,我无法理解任何回答这个问题的脚本。

4 个答案:

答案 0 :(得分:1)

Get-Help Get-ChildItem -Full

我正在使用PS 3.0,您可以使用-File-Directory切换代替? {$_.psiscontainer}。处理大数据时使用Foreach-Object %它比Where-Object更快。至于-Exclude无效,我不确定。您始终可以使用regex-match运算符。

Get-ChildItem $path -r -Directory | % {if($_.name -notmatch 'BackScatter|MicroData'){$_.fullname}}

答案 1 :(得分:0)

好吧,它可能会排除你告诉它的2个文件夹,但不包括子文件夹因为递归。

您可以尝试后期处理。喜欢添加| ? {$ _ -notmatch'Backscatter | MicroData'}

答案 2 :(得分:0)

这对你有用吗?

(dir -recurse | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.FullName }) -notmatch '\\(BackScatter|MicroData)\\' > ZDrive.txt

答案 3 :(得分:0)

试试这个:

$excludes = @("BackScatter", "MicroData")

dir -recurse | ? {
  $_.PSIsContainer -and $excludes -notcontains $_.Name
} | % { $_.FullName } > ZDrive.txt