Node JS - 读取文件属性

8
我正在使用NWJS开发一个桌面应用程序,需要获取.exe文件的文件属性。我尝试使用npm properties模块https://github.com/gagle/node-properties,但返回的对象为空。
properties.parse('./unzipped/File.exe', { path: true }, function (err, obj) {
            if (err) {
                console.log(err);
            }

            console.log(obj);
        });

我需要获取“文件版本”属性:

文件属性

我也尝试使用fs.stats,但没有成功。 有什么想法吗?


已经有另一种方法了。 - Michael Mao
2个回答

3

除非您想编写一些本地C模块,否则有一种简单的hacky方式来轻松完成此操作:使用Windows wmic 命令。这是获取版本的命令(通过谷歌搜索找到):

wmic datafile where name='c:\\windows\\system32\\notepad.exe' get Version

所以你只需在Node中运行此命令即可完成工作:
var exec = require('child_process').exec

exec('wmic datafile where name="c:\\\\windows\\\\system32\\\\notepad.exe" get Version', function(err,stdout, stderr){
 if(!err){
   console.log(stdout)// parse this string for version
 }
});

2
$ wmic datafile where name="C:\Development\nwjs\sistelupdater\unzipped\StaClient.exe" get Version 节点 - USUARIO-PC 错误: 描述 = 无效的查询 - Gabriel Matusevich
在编程中,使用双斜杠'\'作为路径分隔符。我对这个命令也不熟悉。请尝试使用谷歌搜索了解详细信息。 - hassansin
我也使用了双反斜杠,但仍然…… - Gabriel Matusevich
好的,出于某种原因它可以在cmd控制台中工作...但是不能从任何其他控制台或节点中工作。 - Gabriel Matusevich
在 Node 中,你使用了 4 个 '' 吗? - hassansin
好的,搞定了:D 我从一个变量中获取路径的一部分,其中有单个的''...现在它可以工作了:D - Gabriel Matusevich

3

如果您想要以对象形式提供属性,可以使用get-file-properties。它在内部使用wmic,但会将输出解析为易于应用程序使用的类型化对象。

import { getFileProperties, WmicDataObject } from 'get-file-properties'

async function demo() {
  // Make sure to use double backslashes in your file path
  const metadata: WmicDataObject = await getFileProperties('C:\\path\\to\\file.txt')
  console.log(metadata.Version)
}

免责声明:本人是 get-file-properties 的作者。


1
在 Node.js 中对我有用。这能在 Linux 上运行吗? - Nyagaka Enock
据我所知,在Linux中不需要这样做,因为Node的本地fs.stat()将获取Linux中可用的任何文件属性。我可能在这方面有所错误,但我已经查找过了,并没有找到任何真正清晰的等效数据,可以像Windows中的WMIC.exe或macOS上的mdls一样提取文件。我希望为get-file-properties模块添加跨平台支持,只是还没有时间。 - Jack Barry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接