如何获得Windows可执行文件"原始文件名"详细信息字段使用cmd / batch

时间:2017-08-30 11:39:09

标签: windows batch-file

在Windows上,MZ / PE可执行文件通常有一个名为"原始文件名"的用户,用于描述创建时分配给可执行文件的原始文件名。

Windows用户可以通过"详细信息"文件的标签"属性"窗口(通过右键单击文件并选择"属性"打开)。

我发现了很多其他问题,讨论原始文件名,所以为了说清楚,我正在谈论这个字段,对于mspaint.exe文件:

In memory of it's announced death, I hope the gesture will be appreciated :)

但是,我想使用批处理文件或Windows命令行(而不是powershell,请!)来访问/读取此属性(并可能编辑它)。

谢谢!

1 个答案:

答案 0 :(得分:2)

Windows没有内置的命令行工具来从PE文件中读取版本信息。

您可以使用Resource Hacker等资源编辑器导出信息,但仍需解析导出的文件。

在WinVista +(以及安装了桌面搜索的WinXP)上,您可以使用shell属性系统(文件属性对话框使用的相同API)读取信息。

Microsoft开发人员创建了一个名为shellproperty.exe的免费工具,您可以使用该工具来阅读System.OriginalFileName属性。

使用Windows脚本宿主,如果使用ShellFolderItem.ExtendedProperty方法,也可以访问属性系统。

最后,WSH脚本可以与批处理文件合并,以创建一个没有外部依赖关系的工作polyglot

@if (1 == 0) @end /*
@cscript.exe /E:jscript /nologo "%~f0" %*
@goto :eof
*/

var objShell = new ActiveXObject("shell.application");
var objFolder2, ssfSysDir = 0x25, propVal = "";
objFolder2 = objShell.NameSpace(ssfSysDir);
if (objFolder2 != null)
{
    var objFolderItem;
    objFolderItem = objFolder2.ParseName("mspaint.exe");
    if (objFolderItem != null)
    {
        propVal = objFolderItem.ExtendedProperty("{0CEF7D53-FA64-11D1-A203-0000F81FEDEE},6");
        WScript.Echo(propVal);
    }
}