2017-08-30 24 views
2

在Windows上,MZ/PE可執行文件通常有一個名爲「原始文件名」的屬性,用於描述分配給可執行文件的原始文件名當它被創建時。如何使用cmd /批處理獲得Windows可執行文件的「原始文件名」詳細信息字段

它對於Windows用戶來說可以從文件的「屬性」窗口的「詳細信息」選項卡中讀取(通過右鍵單擊文件並選擇「屬性」打開)。

我發現,討論「原始文件名,所以要清楚許多其他問題,我說的這個領域,對於mspaint.exe文件:

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

我然而,對子級像訪問/讀取此屬性(和潛在編輯)使用批處理文件或Windows命令行(不PowerShell的,拜託了!)。

謝謝!

+2

沒有這樣做只是使用批處理文件中沒有內置的方式。信息存儲在版本資源的「StringFileInfo」部分,並且該字段被命名爲「OriginalFilename」。如果你是谷歌的「命令行版本資源編輯器」,你應該能夠找到適當的工具。 – zett42

+0

謝謝你的回覆,@ zett42! – NirIzr

回答

2

Windows沒有內置的命令行工具閱讀中的版本從PE文件形成。

您可以使用像Resource Hacker這樣的資源編輯器來導出信息,但仍然需要解析導出的文件。

在WinVista +(以及安裝了桌面搜索的WinXP)上,您可以使用shell屬性系統(與文件屬性對話框使用相同的API)讀取信息。

Microsoft開發人員創建了一個名爲shellproperty.exe的免費工具,您可以使用該工具閱讀System.OriginalFileName屬性。

使用Windows Script Host,如果使用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); 
    } 
} 
+0

感謝您的回答!你能否稍微解釋一下WSH和批處理腳本的合併方式?如何合併,如何運行這些腳本等...... – NirIzr

+1

作爲批處理文件的前4行只是用自己的文件名執行cscript.exe,然後退出。作爲WSH文件的前4行是「不做任何事情」如果分支和註釋跳過批處理代碼。您只需將其保存爲.cmd文件並將其作爲正常批處理文件運行即可。 – Anders

+0

很酷。謝謝。如果沒有更好的事情發生,我會讓問題坐下來,然後接受它。 – NirIzr

相關問題