如何通过Node.js获取Windows右键文件属性详情中的各类信息?
如何通过Node.js获取Windows文件的详细属性
是的,Node.js可以获取Windows文件「详细信息」标签页中的那些扩展属性,fs.stat()只能提供文件系统层面的基础信息(如大小、创建时间),无法访问这类元数据。以下是两种可行的方案:
方案一:使用PowerShell命令(无需额外依赖)
Windows的PowerShell原生支持读取文件的扩展属性,你可以通过Node.js的child_process模块调用PowerShell命令,解析输出结果。
示例代码:
const { exec } = require('child_process'); function getFileDetails(filePath) { // PowerShell命令:获取指定文件的目标属性并转为JSON格式 const psCommand = `Get-ItemProperty -Path "${filePath.replace(/"/g, '""')}" | Select-Object -Property Title, Subtitle, Rating, Length, BitRate, Size, DirectoryName, Extension | ConvertTo-Json`; return new Promise((resolve, reject) => { exec(`powershell.exe -Command "${psCommand}"`, (error, stdout, stderr) => { if (error) { reject(stderr); return; } try { const details = JSON.parse(stdout); resolve(details); } catch (parseError) { reject(parseError); } }); }); } // 使用示例 getFileDetails('C:\\example\\video.mp4') .then(details => console.log(details)) .catch(err => console.error(err));
说明:
- 对文件路径中的双引号进行转义,避免命令执行出错
- 不同类型的文件(如视频、文档、图片)支持的属性可能不同,需根据文件类型调整
Select-Object中的属性列表 ConvertTo-Json将PowerShell输出转为JSON格式,方便Node.js直接解析
方案二:使用第三方npm包
部分npm包封装了Windows原生API,可更直接地读取文件元数据,例如:
exiftool-vendored:适用于读取图片、视频、音频等媒体文件的详细元数据(包括时长、比特率、标题等)win32-file-properties:专门针对Windows文件属性的包,支持读取各类扩展属性
示例(使用exiftool-vendored):
const exiftool = require('exiftool-vendored').exiftool; async function getMediaDetails(filePath) { const metadata = await exiftool.read(filePath); return { title: metadata.Title, subtitle: metadata.Subtitle, duration: metadata.Duration, bitrate: metadata.AudioBitrate || metadata.VideoBitrate, size: metadata.FileSize, directory: metadata.Directory, type: metadata.FileType }; } // 使用示例 getMediaDetails('C:\\example\\audio.mp3') .then(details => console.log(details)) .catch(err => console.error(err));
注意:使用第三方包时需先通过npm install安装对应依赖,且部分包可能仅支持特定类型的文件。
内容的提问来源于stack exchange,提问作者Alteria
相关产品推荐
相关产品推荐

