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

回复 15# gyue
你要增加内存的什么信息。我可以试试。

TOP

本帖最后由 qixiaobin0715 于 2021-11-3 21:23 编辑

回复 18# gyue
要输出文本到桌面,请将14楼代码for的前面加上一个英文左括号,代码39行修改为:
  1. ))>"%HomePath%\DeskTop\New_硬件报告.txt"
复制代码
即可。
在3~4行之间增加以下代码:
  1.     if "%%a"=="内存设备:" (
  2.         echo,
  3.         echo,内存
  4.         set m=0
  5.     ) else if defined m (
  6.         echo,%%a|findstr /xr "类型 大小 最大时钟频率 制造商 序列号 部件号">nul 2>nul&&echo,%%a:%%b
  7.         if "%%a"=="部件号" set m=
  8.     )
复制代码
以上未经测试,请自行测试。

TOP

回复 20# gyue
你应当没有理解我的意思,好吧,给你一个完整代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2*" %%a in (硬件报告.txt) do (
  4.     if "%%a"=="内存设备:" (
  5.         echo,
  6.         echo,内存
  7.         set m=0
  8.     ) else if defined m (
  9.         echo,%%a|findstr /xr "类型 大小 最大时钟频率 制造商 序列号 部件号">nul 2>nul&&echo,%%a:%%b
  10.         if "%%a"=="部件号" set m=
  11.     )
  12.     if "%%a"=="系统:" (
  13.         echo,系统
  14.         set n=0
  15.     ) else if "%%b"=="设备信息:" (
  16.         echo,
  17.         echo,ATA
  18.         set n=0
  19.     ) else if "%%a"=="网络适配器信息:" (
  20.         set n=0
  21.     ) else if defined n (
  22.         if "%%a"=="产品" (
  23.             echo,产品型号:%%b %%c
  24.         ) else if "%%a"=="型号" (
  25.             echo,%%a %%b:%%c
  26.         ) else if "%%a"=="网络适配器" (
  27.             set str=%%c
  28.             set str=!str:Virtual=!
  29.             set str=!str:Bluetooth=!
  30.             if not "!str!"=="%%c" set n=
  31.             if "%%b"=="Bluetooth" set n=
  32.             if defined n (
  33.                 echo,
  34.                 echo,网络
  35.                 echo,%%a:%%b %%c
  36.             )
  37.         ) else if "%%a"=="接口类型" (
  38.             echo,%%a:%%b %%c
  39.         ) else if "%%a"=="序列号" (
  40.             echo,%%a:%%b
  41.             set n=
  42.         ) else if "%%a"=="硬件地址(MAC)" (
  43.             echo,%%a:%%b
  44.             set n=
  45.         )
  46.     )
  47. ))>"%HomePath%\DeskTop\New_硬件报告.txt"
  48. pause
复制代码
实际上上面增加的代码效率不高,运行时可能会有停顿的现象,因为在for循环里面使用了管道及组合命令。抽空给你再修改一下。

TOP

去掉了代码中的管道及组合命令,重新调整了判断逻辑,将类似项目放在同一个判断语句中,如果全部单独判断(你给定的关键词较多)代码就会太长,并且影响效率。用到了临时文件,最后结果中:“系统”中多了一行“制造商”信息。
  1. @echo off
  2. set "var=网络适配器 设备信息: 系统: 内存设备: 类型 大小 最大时钟频率 制造商 序列号 部件号 硬件地址 型号 产品"
  3. findstr /r "%var%" 硬件报告.txt>a.log
  4. setlocal enabledelayedexpansion
  5. (for /f "tokens=1,2*" %%a in ('findstr /r /v "Virtual Bluetooth 类型详情" a.log') do (
  6.     if "%%a"=="内存设备:" (
  7.         echo,
  8.         echo,内存
  9.         set m=0
  10.         set n=0
  11.     ) else if "%%a"=="系统:" (
  12.         echo,系统
  13.         set n=0
  14.     ) else if "%%b"=="设备信息:" (
  15.         echo,
  16.         echo,ATA
  17.         set n=0
  18.     ) else if "%%a"=="网络适配器" (
  19.         echo,
  20.         echo,网络
  21.         echo,%%a:%%b %%c
  22.         set n=0
  23.     ) else if defined n (
  24.         if "%%a"=="序列号" (
  25.             echo,%%a:%%b
  26.             if not defined m set n=
  27.         ) else if "%%a"=="部件号" (
  28.             echo,%%a:%%b
  29.             set m=
  30.             set n=
  31.         ) else if "%%a"=="硬件地址(MAC)" (
  32.             echo,%%a:%%b
  33.             set n=
  34.         ) else if "%%a"=="型号" (
  35.             echo,%%a %%b:%%c
  36.         ) else (
  37.             if "%%c"=="" (echo,%%a:%%b) else echo,%%a:%%b %%c
  38.         )
  39.     )
  40. ))>"%HomePath%\DeskTop\New_硬件报告.txt"
  41. del a.log
  42. pause
复制代码

TOP

修正了21楼大小和频率中只有数值没有单位的缺陷。
实际上不使用变量延迟也行,即删除上面代码第4行,结果是一样的。
“系统”中多了一行“制造商”信息的问题实际上也能解决,就是要增加判断。

TOP

本帖最后由 qixiaobin0715 于 2021-11-5 11:06 编辑

完全按照楼主要求的信息输出:
  1. @echo off
  2. set "var=网络适配器 设备信息: 系统: 内存设备: 类型 大小 最大时钟频率 制造商 序列号 部件号 硬件地址 型号 产品"
  3. findstr /r "%var%" 硬件报告.txt>a.log
  4. (for /f "tokens=1,2*" %%a in ('findstr /r /v "Virtual Bluetooth 类型详情" a.log') do (
  5.     if "%%a"=="内存设备:" (
  6.         echo,
  7.         echo,内存
  8.         set m=0
  9.         set n=0
  10.     ) else if "%%a"=="系统:" (
  11.         echo,系统
  12.         set n=0
  13.         set l=0
  14.     ) else if "%%b"=="设备信息:" (
  15.         echo,
  16.         echo,ATA
  17.         set n=0
  18.     ) else if "%%a"=="网络适配器" (
  19.         echo,
  20.         echo,网络
  21.         echo,%%a:%%b %%c
  22.         set n=0
  23.     ) else if defined n (
  24.         if "%%a"=="序列号" (
  25.             echo,%%a:%%b
  26.             if not defined m set n=
  27.         ) else if "%%a"=="部件号" (
  28.             echo,%%a:%%b
  29.             set m=
  30.             set n=
  31.         ) else if "%%a"=="硬件地址(MAC)" (
  32.             echo,%%a:%%b
  33.             set n=
  34.         ) else if "%%a"=="型号" (
  35.             echo,%%a %%b:%%c
  36.         ) else if "%%a"=="制造商" (
  37.             if defined l (set l=) else (if "%%c"=="" (echo,%%a:%%b) else echo,%%a:%%b %%c)
  38.         ) else (
  39.             if "%%c"=="" (echo,%%a:%%b) else echo,%%a:%%b %%c
  40.         )
  41.     )
  42. ))>"%HomePath%\DeskTop\New_硬件报告.txt"
  43. del a.log
  44. pause
复制代码

TOP

插槽:2
中数据是从141行取值的,是吗?

TOP

本帖最后由 qixiaobin0715 于 2021-11-8 16:42 编辑
  1. @echo off
  2. set "var=处理器: PCI/AGP 内存阵列: 网络适配器 设备信息: 系统: 类型 大小 最大时钟频率 制造商 序列号 部件号 硬件地址 型号 产品 最大内存容量 内存设备 设备描述 版本 显示适配器"
  3. findstr /i /r /v /c:"类型[^ ]" /c:"[^ ]版本" /c:"DAC" ret.txt>b.log
  4. findstr /r "%var%" b.log>a.log
  5. (for /f "tokens=1,2*" %%a in ('findstr /r /v "Virtual Bluetooth 芯片类型" a.log') do (
  6.     if "%%a"=="内存设备:" (
  7.         echo,
  8.         echo,内存
  9.         set m=0
  10.         set n=0
  11.     ) else if "%%a"=="系统:" (
  12.         echo,系统
  13.         set n=0
  14.     ) else if "%%b"=="设备信息:" (
  15.         echo,
  16.         echo,ATA
  17.         set n=0
  18.     ) else if "%%a"=="网络适配器" (
  19.         echo,
  20.         echo,网络
  21.         echo,%%a:%%b %%c
  22.         set n=0
  23.     ) else if "%%a"=="内存阵列:" (
  24.         echo,
  25.         echo,%%a
  26.         set n=0
  27.     ) else if "%%a"=="显示适配器:" (
  28.         echo,
  29.         echo,%%a
  30.         set n=0
  31.     ) else if "%%b"=="PCI/AGP" (
  32.         echo,
  33.         echo,%%b
  34.         set n=0
  35.     ) else if "%%a"=="处理器:" (
  36.         echo,
  37.         echo,%%a
  38.         set n=0
  39.     ) else if defined n (
  40.         if "%%a"=="序列号" (
  41.             echo,%%a:%%b
  42.             if not defined m set n=
  43.         ) else if "%%a"=="部件号" (
  44.             echo,%%a:%%b
  45.             set m=
  46.             set n=
  47.         ) else if "%%a"=="硬件地址(MAC)" (
  48.             echo,%%a:%%b
  49.             set n=
  50.         ) else if "%%a"=="内存设备" (
  51.             echo,%%a:%%b
  52.             set n=
  53.         ) else if "%%a"=="显存大小" (
  54.             echo,%%a:%%b %%c
  55.             set n=
  56.         ) else if "%%a"=="版本" (
  57.             echo,%%a:%%b %%c
  58.             set n=
  59.         ) else if "%%a"=="型号" (
  60.             echo,%%a %%b:%%c
  61.         ) else (
  62.             if "%%c"=="" (echo,%%a:%%b) else echo,%%a:%%b %%c
  63.         )
  64.     )
  65. ))>"%HomePath%\DeskTop\New_ret.txt"
  66. del a.log
  67. del b.log
  68. pause
复制代码

TOP

PCI/AGP中数据不好处理,有差异,请手动将冒号修改为空格。

TOP

回复 29# gyue
现在应当可以了,请测试。

TOP

我测试的结果:
  1. 系统
  2. 制造商:HP
  3. 产品:OMEN by HP Laptop 15-dc0xxx
  4. 序列号:5CD9156840
  5. 处理器:
  6. 制造商:Intel(R) Corporation
  7. 版本:Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
  8. 内存阵列:
  9. 最大内存容量:32 GB
  10. 内存设备:2
  11. 内存
  12. 类型:DDR4
  13. 大小:8 GB
  14. 最大时钟频率:2667 MT/s
  15. 制造商:Samsung
  16. 序列号:310623C4
  17. 部件号:M471A1K43CB1-CTD
  18. 内存
  19. 类型:DDR4
  20. 大小:8 GB
  21. 最大时钟频率:2667 MT/s
  22. 制造商:Samsung
  23. 序列号:41E1ECAD
  24. 部件号:M471A1K43CB1-CTD
  25. 显示适配器:
  26. 设备描述:GeForce GTX 1050 Ti
  27. 显存大小:4 GB
  28. 显示适配器:
  29. 设备描述:GeForce GTX 1050 Ti
  30. 显存大小:4 GB
  31. 显示适配器:
  32. 设备描述:GeForce GTX 1050 Ti
  33. 显存大小:4 GB
  34. 显示适配器:
  35. 设备描述:GeForce GTX 1050 Ti
  36. 显存大小:4 GB
  37. 显示适配器:
  38. 设备描述:Intel(R) UHD Graphics 630
  39. 显存大小:1 GB
  40. 显示适配器:
  41. 设备描述:Intel(R) UHD Graphics 630
  42. 显存大小:1 GB
  43. 显示适配器:
  44. 设备描述:Intel(R) UHD Graphics 630
  45. 显存大小:1 GB
  46. PCI/AGP
  47. Intel:UHD Graphics 630                                                            显示适配器
  48. ATA
  49. 型号 ID:INTEL SSDPEKKF256G8L
  50. 序列号:BTHH83940JXM256B
  51. ATA
  52. 型号 ID:ST2000LM007-1R8174
  53. 序列号:WDZV90NZ
  54. 网络
  55. 网络适配器:Intel(R) Wireless-AC 9560 160MHz
  56. 接口类型:802.11 Wireless Ethernet
  57. 硬件地址(MAC):A8-6D-AA-72-7D-EC
  58. 网络
  59. 网络适配器:Realtek Gaming GbE Family Controller
  60. 接口类型:Ethernet
  61. 硬件地址(MAC):C4-65-16-AC-A7-11
  62. 请按任意键继续. . .
复制代码

TOP

回复 35# gyue
你把测试出现问题的文本发给我看看。

TOP

回复 38# gyue
请不要压缩,我这里.7z压缩文件没装软件,无法解压。

TOP

返回列表