[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "ata=ATA ]---------------------------------------------------------------------------------------------------------"
  4. set "net=Windows 网络 ]------------------------------------------------------------------------------------------------"
  5. for /f "tokens=1*" %%i in (硬件报告.txt) do (
  6.     if defined f (
  7.         if defined ff (
  8.             if "%%i"=="产品" (
  9.                 echo 系统&echo 产品型号:%%j
  10.             ) else if "%%i"=="序列号" (
  11.                 echo 序列号:%%j
  12.                 set f=
  13.                 set ff=&echo;
  14.             ) else if "%%i"=="网络适配器" (
  15.                 set /a n+=1
  16.                 call;set #!n!=%%#!n!%%@%%j
  17.             ) else if "%%i"=="接口类型" (
  18.                 call;set #!n!=%%#!n!%%@%%j
  19.             ) else if "%%i"=="硬件地址(MAC)" (
  20.                 call;set #!n!=%%#!n!%%@%%j
  21.             )
  22.         )
  23.         if "%%i"=="系统:" (set ff=1) else if "%%i"=="网络适配器信息:" (set ff=1)
  24.     )
  25.     if defined fff (
  26.         if "%%i"=="[" (
  27.             for /f "tokens=1,2 delims=()" %%a in ("%%j") do (
  28.                 echo 型号 ID:%%a
  29.                 echo 序列号 :%%b
  30.                 echo;
  31.             )
  32.         )
  33.     )
  34.     if "%%j"=="系统 ]" (set f=1) else if "%%j"=="%ata%" (set fff=1&echo ATA) else if "%%i"=="--------[" (set fff=)
  35.     if "%%j"=="%net%" (set f=1&echo 网络)
  36. )
  37. for /f "tokens=2,3,4 delims=@=" %%i in ('set #') do (
  38.     echo %%i|findstr /i "microsoft vmware Bluetooth" >nul||(
  39.         echo 网络适配器:%%i
  40.         echo 接口类型 :%%j
  41.         echo 硬件地址^(MAC^) :%%k
  42.         echo;
  43.     )
  44. )
  45. pause
复制代码

TOP

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

回复 1# gyue
更直接一些:
  1. @echo off
  2. for /f "tokens=1,2*" %%a in (硬件报告.txt) do (
  3.     if "%%a"=="系统:" (
  4.         echo,系统
  5.         set n=0
  6.     ) else if "%%b"=="设备信息:" (
  7.         echo,
  8.         echo,ATA
  9.         set n=0
  10.     ) else if "%%a"=="网络适配器信息:" (
  11.         echo,
  12.         echo,网络
  13.         set n=0
  14.     ) else if defined n (
  15.         if "%%a"=="产品" (
  16.             echo,产品型号:%%b %%c
  17.         ) else if "%%a"=="型号" (
  18.             echo,%%a %%b:%%c
  19.         ) else if "%%a"=="网络适配器" (
  20.             echo,%%a:%%b %%c
  21.         ) else if "%%a"=="接口类型" (
  22.             echo,%%a:%%b %%c
  23.         ) else if "%%a"=="序列号" (
  24.             echo,%%a:%%b
  25.             set n=
  26.         ) else if "%%a"=="硬件地址(MAC)" (
  27.             echo,%%a:%%b
  28.             set n=
  29.         )
  30.     )
  31. )
  32. pause
复制代码

TOP

修正一下13楼代码,排除虚拟网卡信息:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2*" %%a in (硬件报告.txt) do (
  4.     if "%%a"=="系统:" (
  5.         echo,系统
  6.         set n=0
  7.     ) else if "%%b"=="设备信息:" (
  8.         echo,
  9.         echo,ATA
  10.         set n=0
  11.     ) else if "%%a"=="网络适配器信息:" (
  12.         set n=0
  13.     ) else if defined n (
  14.         if "%%a"=="产品" (
  15.             echo,产品型号:%%b %%c
  16.         ) else if "%%a"=="型号" (
  17.             echo,%%a %%b:%%c
  18.         ) else if "%%a"=="网络适配器" (
  19.             set str=%%c
  20.             set str=!str:Virtual=!
  21.             set str=!str:Bluetooth=!
  22.             if not "!str!"=="%%c" set n=
  23.             if "%%b"=="Bluetooth" set n=
  24.             if defined n (
  25.                 echo,
  26.                 echo,网络
  27.                 echo,%%a:%%b %%c
  28.             )
  29.         ) else if "%%a"=="接口类型" (
  30.             echo,%%a:%%b %%c
  31.         ) else if "%%a"=="序列号" (
  32.             echo,%%a:%%b
  33.             set n=
  34.         ) else if "%%a"=="硬件地址(MAC)" (
  35.             echo,%%a:%%b
  36.             set n=
  37.         )
  38.     )
  39. )
  40. pause
复制代码

TOP

回复 14# qixiaobin0715


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

TOP

返回列表