2013-12-12 249 views
0

我需要提取其中我不知道名稱的某些dll文件的文件版本。我所知道的是保存fileversion的文件所在的位置,它的名稱與隱藏在其下的文件夾相同。Powershell查找具有相同名稱的文件夾和文件

事實上它是這樣的:

C:\的Inetpub \ wwwroot的\ APPFolder \ BIN \文件 (凡子文件夾的名稱在bin文件夾中的文件的名稱相匹配)

多次嘗試(和失敗的很多)之後,我已經有點來回,現在我在這段代碼....接近,但沒有雪茄靠在舒服:

Get-ChildItem -Path c:\temp\Documents -recurse -Filter *.dll | where-object{ (Get-ChildItem -Path c:\temp\Documents -recurse -Filter *.dll) -match $_.Directory.Name } 

此代碼在\ temp \ documents下遞歸地存儲所有文件,然後m atches在文件夾中的文件,這是很好的...但不是我想要的。此外,上面的代碼給出了與其所在文件夾匹配的文件所在的文件夾,而不僅僅是匹配的文件。

所以...有什麼建議嗎?上面提到的bin文件夾中有多個dll文件,這是我需要選擇與APPFolder同名的文件的一部分。

回答

0

這裏是一個代碼示例,它將爲您提供正在查找的文件的完整文件路徑。

dir . -Recurse -Filter *.dll | ? { -not $_.PSIsContainer } | ? { $_.FullName.ToLower().Contains([IO.Path]::DirectorySeparatorChar + [IO.Path]::GetFileNameWithoutExtension($_.Name.ToLower()) + [IO.Path]::DirectorySeparatorChar) } | Select -ExpandProperty FullName 

其分解,我們有:

dir . -Recurse -Filter *.dll 

這將搜索當前目錄和它遞歸的孩子有一個DLL擴展名的文件

? { -not $_.PSIsContainer } 

這將消除目錄以.dll結尾。不可能的,但可能

? { $_.FullName.ToLower().Contains([IO.Path]::DirectorySeparatorChar + [IO.Path]::GetFileNameWithoutExtension($_.Name.ToLower()) + [IO.Path]::DirectorySeparatorChar } 

這將篩選下來到有一個文件名相同的路徑它上面的目錄名的dll文件。

Select -ExpandProperty FullName 

這會給你完整的文件路徑。

然後你可以按照這個問題的答案here來獲得FileVersion。

+0

好吧:)至少它給了我想要的一個文件...如果該文件與名稱暗示在同一個文件夾下。 – SkyRaider

+0

唯一的問題是,我需要匹配的文件是在另一個文件夾下。就像你說的「這將過濾到文件名與目錄名稱相同的dll」,而我需要類似「這將過濾到文件名爲dll的dll與其所在目錄的名稱相同,它是子目錄「。 dll文件位於具有相同名稱的文件夾下一步。 – SkyRaider

+0

顯然它列出了只有$ _。Directory.Name的子目錄,或者只是GetFileNameWithout .....但是當試圖匹配另一個時,它只匹配它所在的文件夾(主文件夾下的一個文件夾) – SkyRaider

相關問題