Get-ChildItem之后快速过滤

时间:2018-08-17 12:27:58

标签: regex powershell filter

借助PowerShell 5.1和新的.NET framework,最终可以使用Get-ChildItem -Path "\\?\C:\MyPath"处理长路径名。

在下面的代码中,我们尝试过滤掉特定目录(以及目录本身)中的文件和文件夹,因为我们对它们不感兴趣。

此代码可以正常工作,但是我们想知道是否有更好或更快的方法来代替构建长的正则表达式字符串?

如果数组$IgnoredFolders真的很长,则-notmatch可能需要花费更多时间才能做出决定。我不是正则表达式的专家,他们可能会变成多久,所以欢迎您提供任何反馈意见。

<#
# Path
    Folder A         
        File folder A.txt
    Folder B         
        File folder B.txt
    Folder C         
        File folder C.txt

    File root A.txt  
    File root B.txt  
#>

$Path = 'S:\testFolder'

$IgnoredFolders = @(
    "$Path\Folder B"
    "$Path\Folder C"
)

$RegexIgnoredFolders = $IgnoredFolders.ForEach({
    [Regex]::Escape("\\?\$_")
}) -join '|'

@(Get-ChildItem -LiteralPath "\\?\$Path" -Recurse).Where({ 
    $_.FullName -notmatch $RegexIgnoredFolders
}) | select fullname

此代码的输出是:

"$Path\Folder A"              
"$Path\File root A.txt"     
"$Path\File root B.txt"          
"$Path\Folder A\File folder A.txt"

0 个答案:

没有答案