0

我需要提取某些我不知道名称的 DLL 文件的文件版本。我所知道的是保存文件版本的文件所在的位置,并且它的名称与它隐藏在下面的文件夹相同。

事实上,它是这样的:

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,然后匹配文件夹中的文件,这很好......但不是我想要的。上面的代码还给出了与它们所在的文件夹匹配的文件所在的文件夹,而不仅仅是匹配的文件。

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

4

1 回答 1

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

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

然后,您可以在此处按照此问题的答案获取 FileVersion。

于 2013-12-12T20:33:32.760 回答