5

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

1 回答 1

7

-match就像要求*Program Files*。您应该将-Filter参数 ofGet-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此外,如果您不需要它,则不应使用它(如本例所示)。

于 2014-03-02T12:40:22.297 回答