You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在批处理变量中查找字符串?优化systeminfo信息提取

从法语版Windows 11的systeminfo提取信息(无临时文件+单次调用)

问题背景

需要提取法语版Windows 11 Enterprise的以下系统信息:

  • 系统名称
  • 安装日期
  • 上次启动时间
  • 物理内存总量
  • 可用物理内存

现有方案的痛点:

  • 多次调用systeminfo导致执行缓慢
  • 用findstr一次性提取无法拆分到单独变量
  • 临时文件方案可行但不想生成冗余文件
  • 尝试将结果存入变量后,find命令提示“文件未找到”,部分变量无法正常输出

尝试过的脚本

初始脚本(多次调用systeminfo,速度慢)

for /f "tokens=5,* delims= " %%a in ('systeminfo ^| find ^"Nom du syst^"') do set osname=%%a %%b
for /f "tokens=4,* delims= " %%a in ('systeminfo ^| find ^"Date d'installation^"') do set osinstall=%%a %%b
for /f "tokens=6,* delims= " %%a in ('systeminfo ^| find ^"Heure de d^"') do set lastboot=%%a %%b
for /f "tokens=4" %%a in ('systeminfo ^| find ^"physique totale^"') do set totalmem=%%a
for /f "tokens=4" %%a in ('systeminfo ^| find ^"physique disponible^"') do set freemem=%%a

findstr一次性提取(无法拆分变量)

for /f "tokens=*" %%a in ('systeminfo ^| findstr /B /C:"Nom du syst" /C:"Date d'installation" /C:"Heure de d" /C:"physique totale" /C:"physique disponible"') do @echo %%a

临时文件方案(可行但生成冗余文件)

systeminfo >systeminfo.txt
for /f "tokens=5,* delims= " %%a in ('find ^"Nom du syst^" systeminfo.txt') do set osname=%%a %%b
for /f "tokens=4,* delims= " %%a in ('find ^"installation^" systeminfo.txt') do set osinstall=%%a %%b
for /f "tokens=6,* delims= " %%a in ('find ^"Heure de démarrage^" systeminfo.txt') do set lastboot=%%a %%b
for /f "tokens=4" %%a in ('find ^"physique totale^" systeminfo.txt') do set totalmem=%%a
for /f "tokens=4" %%a in ('find ^"physique disponible^" systeminfo.txt') do set freemem=%%a

变量存储尝试(错误用法,提示文件未找到)

for /f "tokens=*" %%a in ('systeminfo ^| findstr /B /C:"Nom du syst" /C:"Date d'installation" /C:"Heure de d" /C:"physique totale" /C:"physique disponible"') do set informations=%%a
for /f "tokens=5,* delims= " %%a in ('find ^"Nom du syst^" %informations%') do set osname=%%a %%b
for /f "tokens=4,* delims= " %%a in ('find ^"installation^" %informations%') do set osinstall=%%a %%b
for /f "tokens=6,* delims= " %%a in ('find ^"Heure de démarrage^" %informations%') do set lastboot=%%a %%b
for /f "tokens=4" %%a in ('find ^"physique totale^" %informations%') do set totalmem=%%a
for /f "tokens=4" %%a in ('find ^"physique disponible^" %informations%') do set freemem=%%a

解决方案脚本

@echo off
setlocal enabledelayedexpansion

:: 仅调用一次systeminfo,逐行处理输出内容
for /f "delims=" %%a in ('systeminfo') do (
    set "current_line=%%a"
    
    :: 匹配系统名称行并提取内容
    echo !current_line! | findstr /B /C:"Nom du syst" >nul && (
        for /f "tokens=5,* delims= " %%b in ("!current_line!") do set "osname=%%b %%c"
    )
    
    :: 匹配安装日期行并提取内容
    echo !current_line! | findstr /B /C:"Date d'installation" >nul && (
        for /f "tokens=4,* delims= " %%b in ("!current_line!") do set "osinstall=%%b %%c"
    )
    
    :: 匹配上次启动时间行并提取内容
    echo !current_line! | findstr /B /C:"Heure de démarrage" >nul && (
        for /f "tokens=6,* delims= " %%b in ("!current_line!") do set "lastboot=%%b %%c"
    )
    
    :: 匹配物理内存总量行并提取内容
    echo !current_line! | findstr /B /C:"Mémoire physique totale" >nul && (
        for /f "tokens=4" %%b in ("!current_line!") do set "totalmem=%%b"
    )
    
    :: 匹配可用物理内存行并提取内容
    echo !current_line! | findstr /B /C:"Mémoire physique disponible" >nul && (
        for /f "tokens=4" %%b in ("!current_line!") do set "freemem=%%b"
    )
)

:: 自定义排版输出提取到的信息
echo ======================
echo 系统信息提取结果
echo ======================
echo 系统名称:          %osname%
echo 安装日期:          %osinstall%
echo 上次启动时间:      %lastboot%
echo 物理内存总量:      %totalmem%
echo 可用物理内存:      %freemem%

endlocal

关键说明

  1. 单次调用systeminfo:全程仅执行一次systeminfo,大幅提升执行速度
  2. 延迟变量扩展:启用enabledelayedexpansion后,在for循环内部可以用!变量名!读取实时更新的变量值,避免循环内变量读取异常
  3. 避免文件引用错误:之前用find命令传入变量内容的错误在于,find默认接收文件名而非字符串内容,这里改用echo !current_line! | findstr处理单行内容,无需临时文件
  4. 逐行匹配提取:对systeminfo的每一行输出进行精准匹配,找到目标行后直接拆分字段存入对应变量,实现自定义排版需求

内容的提问来源于stack exchange,提问作者Sebastien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:35:59