Board logo

标题: [其他] [已解决]批处理如何只取文件的最后2行? [打印本页]

作者: qq506657335    时间: 2010-9-20 10:08     标题: [已解决]批处理如何只取文件的最后2行?

求最简便的方法
谢了。。大家。。

[ 本帖最后由 qq506657335 于 2010-9-20 19:33 编辑 ]
作者: 随风    时间: 2010-9-20 10:28

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

作者: batman    时间: 2010-9-20 10:33

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do set /a n+=1&set ".!n!=%%a"
  3. set /a m=n-1
  4. echo !.%m%!&echo !.%n%!
  5. pause>nul
复制代码

-----------------------------------------------------------------------------
二楼才是最简单的方法,我思路定向了。

[ 本帖最后由 batman 于 2010-9-20 10:36 编辑 ]
作者: bat_521    时间: 2010-9-20 19:04     标题: 回复 2楼 的帖子

随风大哥,能解释一下,为何只显示后2行吗?
  1.      set str=!num!
  2.     set num=%%a
复制代码
set str=!num!  这个的作用是什么?
作者: bluewing009    时间: 2010-9-20 19:09

findstr打印刚号如何?
作者: qq506657335    时间: 2010-9-20 19:33     标题: 回复 4楼 的帖子

set str=!num!
set num=%%a

假设下,如果只循环一次,那此时str就没有值,而num=%%a(第一行)
如果2次
那str=%%a(第一行)
num=另一个%%a(第二行)


这个方法的确很强大。。。
作者: wc726842270    时间: 2010-9-20 20:11

方法真是超强啊,看了以后我都不一定想到
作者: Batcher    时间: 2010-9-20 21:01     标题: 回复 2楼 的帖子

没有考虑以下特殊情况:
1、文件只有1行
2、最后两行是on、off等
3、最后两行包括感叹号
作者: CUer    时间: 2010-9-20 21:27

  1. tail -2 a.txt
复制代码

作者: CUer    时间: 2010-9-20 21:30

  1. gawk "{y=x \"\n\" $0;x=$0}END{print y}" a.txt
复制代码

作者: Batcher    时间: 2010-9-20 22:13

  1. @echo off
  2. set "FileName=C:\test\1.txt"
  3. for /f %%a in ('type "%FileName%" ^| find /c /v ""') do (
  4.     set "RowNum=%%a"
  5. )
  6. set /a RowDst=RowNum-2
  7. if %RowDst% lss 0 (
  8.     type "%FileName%"
  9. ) else (
  10.     more +%RowDst% "%FileName%"
  11. )
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2