【问题标题】:Outputting ONLY folders and excluding specific ones仅输出文件夹并排除特定文件夹
【发布时间】:2013-03-22 17:57:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: powershell recursion dir


    【解决方案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}}
    

    【讨论】:

      【解决方案2】:

      试试这个:

      $excludes = @("BackScatter", "MicroData")
      
      dir -recurse | ? {
        $_.PSIsContainer -and $excludes -notcontains $_.Name
      } | % { $_.FullName } > ZDrive.txt
      

      【讨论】:

        【解决方案3】:

        这对你有用吗?

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

        【讨论】:

        • 是的!它确实非常感谢你。您为一个人节省了数小时的挫败感。
        【解决方案4】:

        好吧,由于递归,它可能排除了您告诉它的 2 个文件夹,但不包括子文件夹。

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

        【讨论】:

        • 非常感谢您,先生。您的后处理添加有效。
        • 顺便说一句,我假设您没有使用 Powershell 3.0,它有一个选项(目录),只允许您选择目录。所以你最终会得到类似的东西: (dir -recurse -directory).fullname | ? {$_ -notmatch 'Backscatter|MicroData'}
        猜你喜欢
        • 2012-11-19
        • 2015-12-11
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        相关资源
        最近更新 更多