【问题标题】:PowerShell: Find exact folder namePowerShell:查找确切的文件夹名称
【发布时间】:2014-04-03 08:22:07
【问题描述】:

我正在尝试找到一种方法来返回给定文件夹的完整路径。问题是如果有类似的命名文件夹,我的代码会返回多个文件夹。例如搜索“Program Files”,返回“Program Files”和“Programs Files (x86)”。因为我没有要求“Program Files (x86),所以我不希望它返回它。我正在使用:

$folderName = "Program Files"
(gci C:\ -Recurse | ?{$_.Name -match [regex]::Escape($folderName)}).FullName

我想用 -eq 替换 -match,但它会返回 $false,因为它正在比较整个路径。

我想过可能会返回所有匹配项,然后要求用户选择哪个是正确的,或者创建一个数组来拆分路径并对每个文件夹名称执行 -eq 然后再次加入路径,但我的阵列部门缺乏技能,无法发挥作用。

任何帮助或指点都将不胜感激。

谢谢

感谢Frode,这是我使用过的东西:

$path = gci -Path "$drive\" -Filter $PartialPath -Recurse -ErrorAction SilentlyContinue #| ?{$_.PSPath -match [regex]::Escape($PartialPath)} 

($path.FullName | gci -Filter $filename -Recurse -ErrorAction SilentlyContinue).FullName

【问题讨论】:

    标签: powershell directory match exact-match


    【解决方案1】:

    -match 就像请求*Program Files*。您应该使用Get-ChildItem-Filter 参数来处理类似的事情。它要快得多,并且不需要正则表达式转义等。

    PowerShell 3:

    $folderName = "Program Files"
    (gci -path C:\ -filter $foldername -Recurse).FullName
    

    PowerShell 2:

    $folderName = "Program Files"
    gci -path C:\ -filter $foldername -Recurse | Select-Object -Expand FullName
    

    此外,如果您不需要 -Recurse,则不应使用它(如本例所示)。

    【讨论】:

    • 谢谢弗罗德。我还需要返回特定文件的全名,因此发布了 GCI 的使用。在您的帮助下,我可以这样做:可以简化吗?
    • $path = gci -Path "$drive\" -Filter $PartialPath -Recurse -ErrorAction SilentlyContinue ($path.FullName | gci -Filter $filename -Recurse -ErrorAction SilentlyContinue).FullName。跨度>
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2013-12-31
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多