找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33941|回复: 9

[文本处理] 批处理for无法正常提取 wmic CPU get ProcessorID返回结果里的指定内容

[复制链接]
发表于 2014-1-20 11:32:22 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-4-29 08:55 编辑

我的需求是获取电脑的cpuid进行绑定。网上一大片灌水。最后找到
wmic CPU get ProcessorID >zzkjdq.txt
这个可以生成cpuid的txt文件。没有问题。
但是我需要进行二次操作获取这个txt文件里面的cpuid的时候就出现问题了
(for /f "tokens=*" %%i in (zzkjbj.txt) do (
set s1=%%i
for /f "tokens=* delims= )" %%j in ('echo !s!') do echo %%j^)))
循环无效。经过多方面排查可能是编码问题。

现在的问题就是
一、有没有直接获取本机cpuid进行二次操作的方法?
二、我怎么样才能使用这个生成的txt文件 。在线等。吃饭等。睡觉等。
求高手、大牛、大神、各位版本解决
新手谢谢了
 楼主| 发表于 2014-1-20 11:44:50 | 显示全部楼层
各位大牛们。认为这个没法弄的也给我说一声哈,我好换个方式。谢谢各位来分享下思路
 楼主| 发表于 2014-1-20 12:01:40 | 显示全部楼层
我在自己解决这个问题的时候。我使用了  
(for /f "tokens=*" %%i in ('wmic CPU get ProcessorID') do (
set s1=%%i
for /f "tokens=* delims= )" %%j in ('echo !s!') do echo %%j^)))
pause
还有wmic CPU get ProcessorID>zzkjbj.htm
经过查看都有3行
ProcessorId      
178BFBFF00610F01  

最后多了一行应该是特殊字符
我能否只获取到第二行数据呢。最后那个特殊字符不能用if判断。太坑爹了。
发表于 2014-1-20 12:20:19 | 显示全部楼层

  1. wmic CPU get ProcessorID /value
复制代码
这样好处理吧
 楼主| 发表于 2014-1-20 12:30:48 | 显示全部楼层
这样好处理吧
xxpinqz 发表于 2014-1-20 12:20

这样处理貌似不行。 还是不能进入循环获取里面的变量。 你能使用变量来获取这个cpuid吗
发表于 2014-1-20 12:32:04 | 显示全部楼层
XP还是Win7?
  1. wmic CPU get ProcessorID /value > a.txt
复制代码
把a.txt压缩一下传上来看看

评分

参与人数 1技术 +1 收起 理由
236598515 + 1 3Q

查看全部评分

 楼主| 发表于 2014-1-20 13:11:11 | 显示全部楼层
求大神 解决下。。
(for /f "tokens=*" %%i in ('wmic CPU get ProcessorID') do (
set s1=%%i
for /f "tokens=* delims= )" %%j in ('echo !s!') do echo %%j^)))
pause
还有wmic CPU get ProcessorID>zzkjbj.htm
经过查看都有3行
ProcessorId      
178BFBFF00610F01  

最后多了一行应该是特殊字符
我想只获取第二行怎么办
发表于 2014-1-20 13:34:55 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('wmic CPU get ProcessorID /value ^| findstr "ProcessorId"') do (
  3.     set str=%%i
  4. )
  5. echo %str%
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
236598515 + 1 正解

查看全部评分

 楼主| 发表于 2014-1-20 14:13:40 | 显示全部楼层
楼上正解。
发表于 2020-8-27 09:44:00 | 显示全部楼层
本帖最后由 cc5511 于 2020-8-28 20:53 编辑

回复 8# DAIC


    你好,你这个测试了正确的;
    不过echo %str%后面加文字的话(比如:echo %str%你好),变量后面的文字就会显示错位,这个变量也不算是一个“健康正常”的变量,请问要怎么处理呢? 我被这个类似问题困扰了。。。

以上是前几天遇到的问题,现在找到办法了。。知道怎么解决了。。。是因为wmic命令的结果末尾会有“隐形的类似【换行】或【TAB】的显示”,需要用(for、call、echo)三个命令配合过滤一下。以8楼的代码再做一下改进。

  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('wmic CPU get ProcessorID /value ^| findstr "ProcessorId"') do (
  3.     set str=%%i
  4. )

  5. ::增加下面这行来过滤wmic命令结果末尾的“换行”。
  6. for /f "delims=" %%a in ('call echo %str%') do set str=%%a

  7. echo %str%
  8. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 08:27 , Processed in 0.022135 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表