标题: [文件操作] 批处理怎样提取TXT文件指定字符的上下几行字符串? [打印本页]
作者: swkj 时间: 2009-10-30 22:55 标题: 批处理怎样提取TXT文件指定字符的上下几行字符串?
附件是电脑硬件检测报告,即要提取的源文件。要提取 [ ATA ] 以下的硬盘信息,特别是硬盘物理序列号! 只是一份报告,其他电脑的报告行号和序列号都不同,但序列号等左边的字符肯定相同。或者有更方便的获取硬盘物理序列号的方法,望提供,3Q!
作者: asnahu 时间: 2009-10-30 23:23
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set foo=%%i
- set /a n+=1
- if /i "!foo:~8,7!"=="[ ATA ]" set min=!n!
- if /i "!foo:~8,9!"=="[ SMART ]" set max=!n!
- )
- for /f "delims=" %%i in (1.txt) do (
- set /a m+=1
- if !m! gtr !min! if !m! lss !max! call,echo/%%~i
- )
- pause>nul
复制代码
作者: swkj 时间: 2009-10-31 08:35
大佬好,感激中。。。
还是那个附件,如果要提取 ATA Device Properties 到 ATA Device Features 之间的内容,应该修改哪里??
作者: asnahu 时间: 2009-10-31 08:47
如果中间的内容是一样的话,代码还可以简化:- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set foo=%%i
- set /a n+=1
- if /i "!foo:~4,21!"=="ATA Device Properties" set min=!n! & set /a max=!n!+13
- if !n! gtr !min! if !n! lss !max! call,echo/%%~i
- )
- pause>nul
复制代码
如果内容不同则用这个:
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set foo=%%i
- set /a n+=1
- if /i "!foo:~4,21!"=="ATA Device Properties" set min=!n!
- if /i "!foo:~4,19!"=="ATA Device Features" set max=!n!
- )
- for /f "delims=" %%i in (1.txt) do (
- set /a m+=1
- if !m! gtr !min! if !m! lss !max! call,echo/%%~i
- )
- pause>nul
复制代码
[ 本帖最后由 asnahu 于 2009-10-31 08:48 编辑 ]
作者: swkj 时间: 2009-10-31 08:54
大佬
"delims=" 是以什么为分隔符?
"!foo:~4,19!" 是如何数出来的?
[ 本帖最后由 swkj 于 2009-10-31 09:00 编辑 ]
作者: asnahu 时间: 2009-10-31 09:09 标题: 回复 5楼 的帖子
【 ATA Device Features:】前面是4个空格,ATA Device Features总共有19个字符。
for的使用可以参考:http://www.bathome.net/thread-2189-1-1.html
[ 本帖最后由 asnahu 于 2009-10-31 09:10 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |