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

[文件操作] 批处理怎样提取TXT文件指定字符的上下几行字符串?

附件是电脑硬件检测报告,即要提取的源文件。要提取 [ ATA ] 以下的硬盘信息,特别是硬盘物理序列号! 只是一份报告,其他电脑的报告行号和序列号都不同,但序列号等左边的字符肯定相同。或者有更方便的获取硬盘物理序列号的方法,望提供,3Q!
1

评分人数

    • batman: 不得随意将问题加改在标题上PB -2

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do (
  3.         set foo=%%i
  4.         set /a n+=1
  5.         if /i "!foo:~8,7!"=="[ ATA ]"   set min=!n!
  6.         if /i "!foo:~8,9!"=="[ SMART ]" set max=!n!
  7. )
  8. for /f "delims=" %%i in (1.txt) do (
  9.         set /a m+=1
  10.         if !m! gtr !min! if !m! lss !max! call,echo/%%~i
  11. )
  12. pause>nul
复制代码

TOP

大佬好,感激中。。。

还是那个附件,如果要提取 ATA Device Properties 到 ATA Device Features 之间的内容,应该修改哪里??

TOP

如果中间的内容是一样的话,代码还可以简化:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do (
  3.         set foo=%%i
  4.         set /a n+=1
  5.         if /i "!foo:~4,21!"=="ATA Device Properties" set min=!n! & set /a max=!n!+13
  6.         if !n! gtr !min! if !n! lss !max! call,echo/%%~i
  7. )
  8. pause>nul
复制代码
如果内容不同则用这个:

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do (
  3.         set foo=%%i
  4.         set /a n+=1
  5.         if /i "!foo:~4,21!"=="ATA Device Properties" set min=!n!
  6.         if /i "!foo:~4,19!"=="ATA Device Features"   set max=!n!
  7. )
  8. for /f "delims=" %%i in (1.txt) do (
  9.         set /a m+=1
  10.         if !m! gtr !min! if !m! lss !max! call,echo/%%~i
  11. )
  12. pause>nul
复制代码

[ 本帖最后由 asnahu 于 2009-10-31 08:48 编辑 ]

TOP

大佬

"delims=" 是以什么为分隔符?


"!foo:~4,19!" 是如何数出来的?

[ 本帖最后由 swkj 于 2009-10-31 09:00 编辑 ]

TOP

回复 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 编辑 ]

TOP

返回列表