如何排除Get-ChildItem结果中的目录?

时间:2015-06-25 21:07:28

标签: powershell get-childitem

我的脚本正在做我需要它做的事情,但我希望能够排除某些文件夹。

在这种情况下,它会是\york\SedAwk\\york\_ROT\

现在,如果我只在$exclude变量中放置一个文件夹,它会按预期工作。当我把两个(或更多)两者都排除在外时,并且在运行时不会抛出任何错误。

这是脚本:

param(
    [string]$pattern,
    [string]$path  
    ) 
$exclude = @('*\york\SedAwk\*','*\york\_ROT\*')
Get-ChildItem -path $path -Recurse -Filter *.html | 
    Where-Object{
        ForEach-Object {
            If (Get-Content $_.FullName | Select-String -Pattern "<h2>Stay Connected") {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<h2>Stay Connected" -Quiet
            }
            ElseIf (Get-Content $_.FullName | Select-String -Pattern "<h2>Soyez branch") {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<h2>Soyez branch" -Quiet
            }
            Else {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<\/main>" -Quiet
            }
        }
    } |
    Select Fullname | ?{$_.FullName -notlike $exclude}

以下是我如何运行它:

.\FindStringContent.ps1 -pattern "list-unstyled" -path "w:\test\york" | Export-CSV "C:\Tools\exclude.csv"

1 个答案:

答案 0 :(得分:0)

我不喜欢使用-Exclude参数,因为它不是文件/文件夹特定的,如果你有一个文件和一个与你排除的字符串匹配的文件夹,它们都会被排除。

当我排除文件时,我会根据您可以放入ForEach的FullName属性将其排除,以检查$exclude变量中是否有任何文件:

param(
    [string]$pattern,
    [string]$path  
    ) 
$exclude = 'SedAwk','_ROT'
Get-ChildItem -path $path -Recurse -Filter *.html | 
    Where-Object{$_.FullName -notlike $exclude -and ForEach-Object {
        If ($exclude -notcontains $_.FullName) {
            If (Get-Content $_.FullName | Select-String -Pattern "<h2>Stay Connected") {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<h2>Stay Connected" -Quiet
            }
            ElseIf (Get-Content $_.FullName | Select-String -Pattern "<h2>Soyez branch") {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<h2>Soyez branch" -Quiet
            }
            Else {
                Select-String -InputObject (Get-Content $_.FullName | Out-String) -Pattern "(?sm)<main([\w\W]*)$pattern([\w\W]*)<\/main>" -Quiet
            }
        }
    }
} | Select Fullname

由TheMadTechnician提供的建议更改