使用PowerShell查找具有相同名称的文件夹和文件

时间:2013-12-12 20:13:08

标签: powershell match fileversioninfo

我需要提取某些我不知道名字的DLL文件的fileversion。我所知道的是保存fileversion的文件所在的位置,其名称与隐藏在其下的文件夹相同。

事实上它是这样的:

C:\inetpub\wwwroot\APPFolder\bin\files (子文件夹的名称与bin文件夹中文件的名称相匹配)

经过多次尝试(以及很多失败),我已经有点来回走了,现在我正在舒适地倚靠这段代码.... close, but no cigar

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下递归搜索所有文件,然后匹配文件夹中的文件,这很好......但不是我想要的。此外,上面的代码为文件夹提供了与其所在文件夹匹配的文件,而不仅仅是匹配的文件。

那么......有什么建议吗?上面提到的bin文件夹中有多个DLL文件,这是我需要选择与APPFolder同名的文件的一部分。

1 个答案:

答案 0 :(得分: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

这将为您提供完整的文件路径。

然后,您可以按照this question here的答案获取FileVersion。