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

[文本处理] 【已解决】开启了变量延迟,为什么for结果还是不能正常赋值?

本帖最后由 zds612 于 2017-12-5 11:21 编辑

小白一个,想要获取一个ping结果文本的丢包率

希望通过两次for来获取并赋值,但是总是不成功,求指导

或者是否有更优雅的方式实现?求例子,谢谢!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=(" %%i in ('find "数据包" d:\ping_test.txt') do set "mc = %%i"
  4. echo %mc%
  5. rem for /f "tokens=1 delims= " %%i in (%mc%) do echo %%i
  6. pause
复制代码
ping_test.txt内容
  1. 正在 Ping 132.147.176.50 具有 32 字节的数据:
  2. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  3. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  4. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  5. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  6. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  7. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  8. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  9. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  10. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  11. 来自 132.147.176.50 的回复: 字节=32 时间<1ms TTL=64
  12. 132.147.176.50 的 Ping 统计信息:
  13.     数据包: 已发送 = 10,已接收 = 10,丢失 = 0 (0% 丢失),
  14. 往返行程的估计时间(以毫秒为单位):
  15.     最短 = 0ms,最长 = 0ms,平均 = 0ms
复制代码

本帖最后由 Blitz 于 2017-12-2 17:09 编辑

把第一个for的set  "mc = %%i"等号两边的空格去掉就行了
变量延迟也没必要开
第二个for也可以删掉
分隔符换成中文逗号似乎好点
  1. @echo off
  2. for /f "tokens=3 delims=," %%i in ('find "数据包" d:\ping_test.txt') do set "mc=%%i"
  3. echo %mc%
  4. pause
复制代码
想了一下你应该是想获取到0这个数字:
  1. @echo off
  2. for /f "tokens=3 delims=," %%i in ('find "数据包" ping_test.txt') do set "mc=%%i"
  3. for /f "tokens=3" %%a in ("%mc%") do echo %%a
  4. pause
复制代码

TOP

回复 2# Blitz


    楼主所言甚是,其他语言搞个空格没事,这里就行通了。

TOP

回复 2# Blitz


    非常感谢,新手遇到此类问题,死活找不出问题,真是蛮头疼的,还好有之家大侠相助,再次感谢!

TOP

返回列表