![](/img/trans.png)
[英]Recursively find same name files between two folders using powershell
[英]Finding folders and files with same name using PowerShell
我需要提取某些不知道其名稱的DLL文件的fileversion。 我所知道的是保存fileversion的文件所在的位置,並且其名稱與其隱藏在其下的文件夾相同。
實際上是這樣的:
C:\\inetpub\\wwwroot\\APPFolder\\bin\\files
(其中子文件夾的名稱與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
下的所有\\temp\\documents
,然后匹配文件夾中的文件,這很不錯...但是不是我想要的。 同樣,上面的代碼還為文件夾提供了與其所在文件夾相匹配的文件,而不僅僅是匹配的文件。
那么...有什么建議嗎? 上面提到的bin文件夾中有多個DLL文件,這就是為什么我需要選擇一個與APPFolder同名的DLL的原因。
這是一個代碼示例,它將為您提供所需文件的完整文件路徑。
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
這將為您提供完整的文件路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.