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

[文本处理] 如何最有效率取得 倒数第2行 的资料?

一般取资料可以用 for /f "skip=xx"

但是这种方法只能用于 由上往下,并且必须已知文件一共有几行才行
如果文件行数为变数,我尝试了几种办法,但都觉得不好,请问有没有打未大大另有高见,请指教一下,谢谢

我的方法∶

1. 先测量此文件有几行(利用 for /f 加上 计数),在算出要skip的行数,但这方法却一直行不通,会取错行....???

2. 把整个文件倒叙输出成另一文件,再去读取该文件作操作,但是这样如果文件很长,非常耗时

请问有没有别的方法??

可以这样做:
先在文件最后加一行标识符。如
ehco.!##$!@#>>a.txt
用find 找出!##$!@#在第几行,
find /N "!##$!@#" a.txt
得到行数后,就简单了。

TOP

  1. @echo off
  2. for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
  3. for /f "skip=%sn% tokens=1* delims=:" %%i in ('findstr /n ".*" "a.txt"') do echo %%j&pause&goto :eof
复制代码

TOP

1. 先测量此文件有几行(利用 for /f 加上 计数),在算出要skip的行数,但这方法却一直行不通,会取错行....???

可能是中间有空行被刷掉了吧。

TOP

  1. @echo off
  2. for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
  3. for /f "tokens=*" %%i in ('more +%sn% a.txt') do echo %%i&&pause&& goto :eof
复制代码

TOP

要是我就用第三方了...我自己写的CFile也不是吃干饭的吖...CFile -2 t.txt就可以了...
OrzDEF

TOP

  思路:用findstr /n 获取文本总行数n,最后,for中 ship=n-2 提取到第一条数据后立即跳出for即可。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

用变量赋值法:
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set "n=%%a"&set "_%%a=%%b"
  3. set /a n-=1
  4. call,echo %%_%n%%%&pause>nul
复制代码
***共同提高***

TOP

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

TOP

刚才发错了。。。正在思考。。

[ 本帖最后由 qingyuedufeng 于 2010-2-13 15:59 编辑 ]

TOP

返回列表