返回列表 发帖

[文本处理] 已解决,请教批处理如何提取文本中的特定的文本?

本帖最后由 gyue 于 2021-11-10 10:22 编辑

请问批处理可以提取文本中的特定文字到新文本吗?或者是复制特定文字到新文本。
具体是我用ADIA64生成文本报告,但是没用的报告文字太多只想截取以下特定的数据;
报告中的ATA各个硬盘的型号,序列号。
主机型号,序列号。网卡的的mac地址(物理有线,跟无线网卡)。

链接:https://pan.baidu.com/s/1KAor6v7GDnCyC5TiChFPpA
提取码:6bd6


最终需求效果
系统
产品型号:OMEN by HP Laptop 15-dc0xxx
序列号:5CD9156836

CPU
制造商:Intel(R) Corporation
版本:Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz


内存
制造商:Samsung
序列号:310623C4
部件号:M471A1K43CB1-CTD
大小:8G
类型:DDR4
最大时钟频率:2667 MT/s
最大内存容量 :32G
插槽:2

ATA
型号 ID:   INTEL SSDPEKKF256G8L
序列号 :     BTHH83940JXM256B

型号 ID:   ST2000LM007-1R8176
序列号 :      WDZV90NM

网络
网络适配器: Realtek Gaming GbE Family Controller
接口类型 :                   Ethernet
硬件地址(MAC) : C4-65-16-AC-A7-11

网络适配器:  Intel(R) Wireless-AC 9560 160MHz
接口类型  :             802.11 Wireless Ethernet
硬件地址(MAC):    A8-6D-AA-72-7D-EC

显示适配器
设备描述:GeForce GTX 1050 Ti
显存大小:4GB

显示适配器
设备描述: Intel(R) UHD Graphics 630
显存大小:1GB

PCI/AGP 视频
Intel UHD Graphics 630            显示适配器

回复 1# gyue


    请把你测试用的文件上传到阿里云盘或百度网盘
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 gyue 于 2021-10-30 22:35 编辑

回复 2# Batcher


已上传,ADIA输出的文件格式没动,由于可能每台机器配置不一样,可能会涉及多硬盘,多序列号 所以安行搜索应该是对应不上,不知道能按关键字搜索行不行
   链接:https://pan.baidu.com/s/1you3x8NaUU2BI5qr1WZW0g
提取码:d7ij
--来自百度网盘超级会员V6的分享

TOP

回复 3# gyue


这个是静默参数导出的,还是手动导出的?如果是静默导出格式就是一致的,如果是手动导出,由于界面布局不同,勾选的参数不同,可能有差异。

TOP

本帖最后由 gyue 于 2021-10-31 11:47 编辑

回复 4# yakeyun


    测试时我用的是手动,PE下用静默参数,静默也只导出需要的硬件信息就行,但是不管格式是否一样,里边的参数信息是一样的。

TOP

本帖最后由 yakeyun 于 2021-10-31 13:51 编辑

回复 5# gyue

只获取了一部分,没办法做到对应,并一起输出。只能大佬出手,如果是易语言就好处理。
网络部分需要名称后面直接接MAC,例如:
网络适配器     Microsoft Wi-Fi Direct Virtual Adapter #2     硬件地址(MAC)      AA-6D-AA-72-7D-EC)

Microsoft Wi-Fi Direct Virtual Adapter #2     AA-6D-AA-72-7D-EC


@echo off
cd /d "%~dp0"
setlocal EnableDelayedExpansion
for /f "tokens=*" %%a in ('type "硬件报告.txt" ^|find "OME"') do (
       for /f "tokens=1,* delims= " %%b in ('echo %%a ^|find "产品"') do (
       echo 产品型号:%%c
    )
       )
for /f "tokens=1,2 delims=^ " %%d in ('type "硬件报告.txt" ^|findstr "序列号" ') do echo 产品序号:%%e
for /f "tokens=1,* delims=^ " %%f in ('type "硬件报告.txt" ^|findstr /i "网络适配器"') do (
for /f "tokens=*" %%h in ('echo %%g ^|findstr "Bluetooth"') do echo %%h
for /f "tokens=*" %%h in ('echo %%g ^|findstr "Intel"') do echo %%h
for /f "tokens=*" %%h in ('echo %%g ^|findstr "Wi-Fi"') do echo %%h
)
for /f "tokens=*" %%j in ('type "硬件报告.txt" ^|findstr /i "硬件地址(MAC)" ^|more +0') do echo %%j
pause>nul

TOP

回复 6# yakeyun


    你已经很厉害了,我之前用findstr都做不到你这样的

TOP

回复 7# gyue


    上传不了图片本来说P个想要的结果图:只能写一下了,最终希望想输出的格式文本是以下形式的,不需要虚拟网卡

系统
产品型号:OMEN by HP Laptop 15-dc0xxx
序列号:5CD9156836


ATA
型号 ID:   INTEL SSDPEKKF256G8L
序列号 :     BTHH83940JXM256B

型号 ID:   ST2000LM007-1R8176
序列号 :      WDZV90NM

网络
网络适配器: Realtek Gaming GbE Family Controller
接口类型 :                   Ethernet
硬件地址(MAC) : C4-65-16-AC-A7-11

网络适配器:  Intel(R) Wireless-AC 9560 160MHz
接口类型  :             802.11 Wireless Ethernet
硬件地址(MAC):    A8-6D-AA-72-7D-EC

TOP

回复 8# gyue


请把3楼、8楼的内容更新到顶楼作为完整需求的一部分,以便他人查看。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher


    已更新谢谢提醒

TOP

回复 1# gyue


这个检测是只针对笔记本还是台式机也有,如果只针对笔记本,且序列号位数固定就好提取序列号。
网卡和硬盘最好也统一下,看看具体有哪几个型号。一般品牌机硬盘和网卡都是固定的款。

TOP

@echo off
setlocal enabledelayedexpansion
set "ata=ATA ]---------------------------------------------------------------------------------------------------------"
set "net=Windows 网络 ]------------------------------------------------------------------------------------------------"
for /f "tokens=1*" %%i in (硬件报告.txt) do (
    if defined f (
        if defined ff (
            if "%%i"=="产品" (
                echo 系统&echo 产品型号:%%j
            ) else if "%%i"=="序列号" (
                echo 序列号:%%j
                set f=
                set ff=&echo;
            ) else if "%%i"=="网络适配器" (
                set /a n+=1
                call;set #!n!=%%#!n!%%@%%j
            ) else if "%%i"=="接口类型" (
                call;set #!n!=%%#!n!%%@%%j
            ) else if "%%i"=="硬件地址(MAC)" (
                call;set #!n!=%%#!n!%%@%%j
            )
        )
        if "%%i"=="系统:" (set ff=1) else if "%%i"=="网络适配器信息:" (set ff=1)
    )
    if defined fff (
        if "%%i"=="[" (
            for /f "tokens=1,2 delims=()" %%a in ("%%j") do (
                echo 型号 ID:%%a
                echo 序列号 :%%b
                echo;
            )
        )
    )
    if "%%j"=="系统 ]" (set f=1) else if "%%j"=="%ata%" (set fff=1&echo ATA) else if "%%i"=="--------[" (set fff=)
    if "%%j"=="%net%" (set f=1&echo 网络)
)
for /f "tokens=2,3,4 delims=@=" %%i in ('set #') do (
    echo %%i|findstr /i "microsoft vmware Bluetooth" >nul||(
        echo 网络适配器:%%i
        echo 接口类型 :%%j
        echo 硬件地址^(MAC^) :%%k
        echo;
    )
)
pauseCOPY

TOP

本帖最后由 qixiaobin0715 于 2021-11-2 11:07 编辑

回复 1# gyue
更直接一些:
@echo off
for /f "tokens=1,2*" %%a in (硬件报告.txt) do (
    if "%%a"=="系统:" (
        echo,系统
        set n=0
    ) else if "%%b"=="设备信息:" (
        echo,
        echo,ATA
        set n=0
    ) else if "%%a"=="网络适配器信息:" (
        echo,
        echo,网络
        set n=0
    ) else if defined n (
        if "%%a"=="产品" (
            echo,产品型号:%%b %%c
        ) else if "%%a"=="型号" (
            echo,%%a %%b%%c
        ) else if "%%a"=="网络适配器" (
            echo,%%a%%b %%c
        ) else if "%%a"=="接口类型" (
            echo,%%a%%b %%c
        ) else if "%%a"=="序列号" (
            echo,%%a%%b
            set n=
        ) else if "%%a"=="硬件地址(MAC)" (
            echo,%%a%%b
            set n=
        )
    )
)
pauseCOPY

TOP

修正一下13楼代码,排除虚拟网卡信息:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2*" %%a in (硬件报告.txt) do (
    if "%%a"=="系统:" (
        echo,系统
        set n=0
    ) else if "%%b"=="设备信息:" (
        echo,
        echo,ATA
        set n=0
    ) else if "%%a"=="网络适配器信息:" (
        set n=0
    ) else if defined n (
        if "%%a"=="产品" (
            echo,产品型号:%%b %%c
        ) else if "%%a"=="型号" (
            echo,%%a %%b%%c
        ) else if "%%a"=="网络适配器" (
            set str=%%c
            set str=!str:Virtual=!
            set str=!str:Bluetooth=!
            if not "!str!"=="%%c" set n=
            if "%%b"=="Bluetooth" set n=
            if defined n (
                echo,
                echo,网络
                echo,%%a%%b %%c
            )
        ) else if "%%a"=="接口类型" (
            echo,%%a%%b %%c
        ) else if "%%a"=="序列号" (
            echo,%%a%%b
            set n=
        ) else if "%%a"=="硬件地址(MAC)" (
            echo,%%a%%b
            set n=
        )
    )
)
pauseCOPY

TOP

回复 14# qixiaobin0715


    非常非常感谢,效果很理想

TOP

返回列表