2014-03-02 61 views
4

我試圖找到一種方法來返回給定文件夾的完整路徑。問題是如果有一個類似的命名文件夾,我的代碼會返回多個文件夾。例如搜索「程序文件」,返回「程序文件」和「程序文件(x86)」。由於我沒有問「程序文件(86),我不希望它返回它我使用:PowerShell:查找確切的文件夾名

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

我想用當量替換-match的,但它會返回$ false,因爲它比較整個路徑

我想過可能會返回所有匹配,然後要求用戶選擇哪一個是正確的,或者創建一個數組來分割路徑並在每個數組上執行-eq然後重新加入路徑,但是我的技能在陣列部門中是不存在的,並且無法使其工作。

任何幫助或指針將受到感謝。

感謝

這裏是我與感謝用於弗羅德:

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

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

回答

7

-match好像叫了*Program Files*。你應該使用參數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如果你不需要它(如本例中)。

+0

謝謝弗羅德。我還需要返回特定文件的FullName,因此公佈的GCI使用情況。在你的幫助下,我可以這樣做:它可以簡化嗎? – woter324

+0

$ path = gci -Path「$ drive \」-Filter $ PartialPath -Recurse -ErrorAction SilentlyContinue ($ path.FullName | gci -Filter $ filename -Recurse -ErrorAction SilentlyContinue).FullName。 – woter324

相關問題