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

[文本处理] [已解决]批处理如何获取指定字符串的之前第n行的指定的内容?

本帖最后由 pcl_test 于 2017-3-25 09:06 编辑

一个文本里包含如下内容:
Name: 本地连接
Guid: {9A0760AB-EA91-4E74-B562-C5B1FD7EE8FF}
DeviceName: Intel(R) PRO/1000 PL Network Connection
Status: 2
MediaType: 3
Not Shared... Enabling public connection share...
Shared!


Name: VMware Network Adapter VMnet1
Guid: {ABD6CC7A-521F-40BE-90AB-1801A7C2B677}
DeviceName: VMware Virtual Ethernet Adapter for VMnet1
Status: 2
MediaType: 3


Name: wlan_ap
Guid: {B7850060-CF51-47CC-A7C5-C4D4C0054DAC}
DeviceName: Microsoft Virtual WiFi Miniport Adapter #2
Status: 2
MediaType: 3
Not Shared... Enabling private connection share...
Shared!


Name: 本地连接 2
Guid: {0161B56A-E61F-4014-82F4-3E49C10C81DA}
DeviceName: Sierra Wireless AC595U 1xEV-DO Network Adapter
Status: 7
MediaType: 3

想用根据字符串Enabling public,获取到他上面第五行:Name: 本地连接 中的“本地连接”,“本地连接”是不定的,搜索了很多帖子,都是可以通过过for  skip跳过 往下,怎样才能获取上 n行的指定内容呢?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

win7及以上系统运行
  1. powershell "(gc '文本.txt'|select-string '\bEnabling public\b' -context 5,1).Context.PreContext[0].split(':')[1]"
  2. pause
复制代码

TOP

回复 23# forfiles


果然是重定向时的问题!!!多谢您的耐心解释!!

TOP

回复 22# cnswb


    试试就知道了,没有问题。你写入文件的时候有空格是因为你的重定向符号前面多了空格,比如 echo xxx >1.log

TOP

本帖最后由 cnswb 于 2012-9-25 23:14 编辑

回复 21# forfiles

呵呵 可以了 多谢,不知道原因是什么! 这个名字要带入下一个命令中使用的,在下一个命令中,直接引用 不知道还会不会有空格了
还要自己多学习了

这里的高人,都比较热心,!!等我吧做完的完整批处理给大家看吧!

TOP

回复 20# cnswb


@echo off
for /f "tokens=1* delims=:" %%i in ('findstr /inc:"Enabling public" 测试.txt') do set /a N=%%i-5
for /f "tokens=1,2* delims=: " %%i in ('findstr /in ".*" "测试.txt"') do if %%i equ %N% set str=%%k&goto end
:end
>1.log echo %str%
pause

TOP

回复 19# terse


比如我把结果 > 1.log  发现行尾有空格,后来看 其他几个也有空格,不知道是怎么回事

TOP

回复 18# cnswb
我16楼已经说了 SKIP=0 的时候是出错的啊 也就是值必须大于0
至于空格 具体是什么情况

TOP

本帖最后由 cnswb 于 2012-9-25 21:26 编辑

回复 13# forfiles

不好意思 昨天有急事儿,没打招呼就慌乱的下线了
去掉@echo off这样的:
D:\桌面\新建文件夹>for /F "delims=:" %a in ('findstr /nc:"Enabling public" a.txt
') do set /a linenum=%a-6

D:\桌面\新建文件夹>set /a linenum=6-6

D:\桌面\新建文件夹>set "skip=skip=0"

D:\桌面\新建文件夹>for /F "skip=0 tokens=1* delims=: " %a in (a.txt) do echo %b
& pause & exit
此时不应有  tokens=1* delims=: "。

测试了一下,把那个 字符串 往下换了几行 就可以找到相应的地方了,不知道什么原因

terse的那个倒是可以,但是不知道为什么输出之后尾部都会多一个空格符号

TOP

回复 16# terse


    嗯,forfiles 在 11楼弥补了这个考虑不周之处

TOP

skip=0 呢   当前长度: 系统限制:

TOP

回复 10# cnswb


    貌似是...唉,我这眼神

TOP

变通一下
  1. @echo off
  2. for /f "tokens=1* delims=:" %%i in ('findstr /inc:"Enabling public" 测试.txt') do set /a N=%%i-5
  3. for /f "tokens=1,2* delims=: " %%i in ('findstr /in ".*" "测试.txt"') do if %%i equ %N% set str=%%k&goto end
  4. :end
  5. echo %str%
  6. pause
复制代码
1

评分人数

TOP

回复 12# cnswb


    把@echo off删掉,执行过程贴出来看看

TOP

回复 11# forfiles



返回:此时不应有  tokens=1* delims=: "。我就是搞不清 为啥这段不应该有呢?

TOP

返回列表