PowerShell:查找确切的文件夹名称

时间:2014-03-02 11:59:06

标签: powershell directory match exact-match

我正在尝试找到一种方法来返回给定文件夹的完整路径。问题是如果有一个类似的命名文件夹,我的代码会返回多个文件夹。例如搜索“程序文件”,返回“程序文件”和“程序文件(x86)”。由于我没有要求“程序文件(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

1 个答案:

答案 0 :(得分:7)

-match就像要求*Program Files*一样。你应该使用-Filter Get-ChildItem参数来做这样的事情。它速度快得多,不需要正则表达式等等。

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(如本例所示)。