Electron桌面应用中如何过滤systeminfo输出仅保留值字段?
提取systeminfo输出中的值部分(过滤键名)
嗨,我来帮你搞定这个问题!你现在需要从systeminfo | findstr的输出里去掉键名(比如“OS Name:”),只保留后面的具体值,对吧?这里有两种实用的方案,你可以根据自己的习惯选:
方法1:用JavaScript字符串处理
既然你已经拿到了完整的输出字符串,直接用JS的字符串方法就能快速提取值。核心思路是按冒号分割字符串,跳过键名部分,再把剩下的内容拼接回来并去除多余空格:
const shell = require('shelljs'); // 执行命令并获取输出(加上{ silent: true }避免输出到控制台) let winOSNameResult = shell.exec('systeminfo | findstr /C:"OS Name"', { silent: true }).stdout; // 处理字符串:分割后跳过键名,拼接剩余部分并去除前后空格 let winOSName = winOSNameResult.split(':').slice(1).join(':').trim(); console.log(winOSName); // 输出示例:Microsoft Windows 10 Pro
为什么这么写?
split(':')把字符串按冒号拆成数组,比如["OS Name", " Microsoft Windows 10 Pro"]slice(1)取数组中从第二个元素开始的所有内容(避免值里有冒号的情况,比如某些版本的系统信息可能带冒号)join(':')把拆分的部分重新拼回去,trim()去掉前后的空格和换行符
方法2:直接改进Windows命令
如果你想在命令层面就直接拿到值,不用JS额外处理,可以用for /f命令来解析findstr的输出:
const shell = require('shelljs'); // 用for /f直接提取冒号后的所有内容 let winOSName = shell.exec('systeminfo | findstr /C:"OS Name" | for /f "tokens=1* delims=:" %a in (\'more\') do @echo %b', { silent: true }).stdout.trim(); console.log(winOSName); // 输出示例:Microsoft Windows 10 Pro
命令解释:
for /f "tokens=1* delims=:" %a in ('more'):把每一行按冒号分割,tokens=1*表示第一部分(键名)赋值给%a,剩下的所有内容(包括可能的冒号)赋值给%b@echo %b:只输出值部分,@避免echo本身的命令显示
两种方法都能解决你的问题,第一种更灵活(比如应对输出格式小变化),第二种则让JS代码更简洁~
内容的提问来源于stack exchange,提问作者Thomas Bengtsson
相关产品推荐
相关产品推荐

