我需要提取某些我不知道名字的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同名的文件的一部分。
答案 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。