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

思路&代码

这个是以前就遇到过的问题,其实方法是有很多种的

思路一:用findstr

利用findstr的/n功能,让每行前都显示个行号,然后用for分段读取,到指定行就显示出来

  1. @echo off
  2. for /f "tokens=1,2* delims=:" %%a in ('findstr /n . a.txt') do if %%a==3 echo %%b
  3. pause
复制代码


缺陷:空行的话findstr是不显示的,反正是空行,显示了别人也不知道

思路二:用变量储存行数

利用变量,每处理一行就增加1,到行数就显示

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (a.txt) do (
  4. set /a line+=1
  5. if !line!==3 echo %%a
  6. )
  7. pause
复制代码


缺点:用了变量延迟,不过也可以随时关闭掉

思路三:用more或for跳过行数

利用more的跳过行数来跳过前两行,然后显示完第三行就跳出for

  1. @echo off
  2. for /f "delims=" %%a in ('more a.txt +2') do echo %%a&goto end
  3. :end
  4. pause
复制代码


类同,用for的skip功能跳过前两行,然后显示完第三行就跳出for

  1. @echo off
  2. for /f "skip=2 delims=" %%a in (a.txt) do echo %%a&goto end
  3. :end
  4. pause
复制代码


缺点:多用了一个标签,不过不伤大雅

思路四:利用set /p配合more

先利用more把前两行过滤掉保存到tmp.txt,然后再用set /p保存到变量内容中,最后删除临时文件tmp.txt

  1. @echo off
  2. more a.txt +2>tmp.txt
  3. set /p a=<tmp.txt
  4. echo %a%
  5. del /q tmp.txt
  6. pause
复制代码


缺点:临时文件,给人厌恶感



这么多种方法中,方法一和方法二是最普通的,而且扩展一下,可以把每一行的内容都保存到变量中,要用的时候就可以直接用变量,省去了读取的时间

方法三可拓展性极低,只能单纯的解决问题,多次读取要浪费时间。不过方法三的第二种(用for的skip跳行数)读取几乎不需要时间,因此每次读取也不感觉停顿

方法四纯粹无理取闹,没有特殊情况用前三种就可以了

TOP

返回列表