Board logo

标题: [文本处理] 批处理怎样查找行数? [打印本页]

作者: dabei1974    时间: 2011-3-24 10:13     标题: 批处理怎样查找行数?

我想实现以下效果:查看文本A.txt中是否有100行,如果有就跳转到yes,如果没有就跳转到no。我以前用的是把行号写到一个新文本b.txt,然后find b.txt查找是否有有100这个数字,感觉太麻烦,也不正规,特此请教,谢谢。
作者: TX_kakashi    时间: 2011-3-24 10:30

  1. @echo off&setlocal enabledelayedexpansion
  2. set count=0
  3. for /f "tokens=*" %%a in ('type a.txt') do (
  4.      set /a count=!count!+1
  5. )
  6. echo !count!
  7. pause
复制代码

作者: batman    时间: 2011-3-24 10:35

示例如下:
  1. @echo off
  2. for /f "delims=:" %%a in ('findstr /n .* a.txt') do if %%a equ 100 goto yes
  3. :no
  4. echo bathome
  5. pause>nul&goto :eof
  6. :yes
  7. echo batman
  8. pause>nul
复制代码

作者: batman    时间: 2011-3-24 10:43

2# TX_kakashi
不可滥用变量延迟:
  1. @echo off
  2. for /l %%a in (1,1,100) do set /a n+=1
  3. echo %n%
  4. pause>nul
复制代码

作者: dabei1974    时间: 2011-3-24 10:52

谢谢batman,解决
作者: tmplinshi    时间: 2011-3-24 10:57

  1. for /f "skip=99" %%a in (a.txt) do goto yes
  2. goto no
复制代码

作者: batman    时间: 2011-3-24 10:59

问题解决了,楼主也要想一下为什么这样能达到需要的效果?

当然如果是纯伸手党,就只怪我手贱加嘴贱。。。

但是真心希望楼主不是。。。
作者: TX_kakashi    时间: 2011-3-24 11:17

2# TX_kakashi
不可滥用变量延迟:
@echo off
for /l %%a in (1,1,100) do set /a n+=1
echo %n%
pause>nul

batman 发表于 2011-3-24 10:43

下次注意,顺便问一下变量延迟有效率的问题是么?
作者: terse    时间: 2011-3-24 11:30

这个计算空行的
  1. for /f %%i in ('type a.txt^|find /v /c ""') do if %%i lss 100 goto :no
复制代码

作者: wc726842270    时间: 2011-3-24 11:52

2# TX_kakashi
其实一个SET /A N+=1就可以了
作者: dabei1974    时间: 2011-3-24 11:52

batman说的是,我来这里的目的也是为了学点东西的,这两个问题困扰了我好长时间,查了百度,看了好多教程,自己试验了好多方法,但是都没有成功,所以才来请教的。我还需要系统的学习一下,谢谢batman教诲。
作者: TX_kakashi    时间: 2011-3-24 11:58

2# TX_kakashi
其实一个SET /A N+=1就可以了
wc726842270 发表于 2011-3-24 11:52

了解了,有点强迫症,看到n+=1就有点不喜欢的感觉..下次注意,下次注意...
作者: tmplinshi    时间: 2011-3-24 12:18

9# terse


type a.txt|find /v /c "" 可以换成 find /v /c "" <a.txt
作者: wc726842270    时间: 2011-3-24 12:34

本帖最后由 wc726842270 于 2011-3-24 12:54 编辑

看来还是FINDSTR /N准确。用FOR /F 的话。命令会把回车符当作分组符号,也就是说当一行只有一个回车时,不会被处理
作者: CrLf    时间: 2011-3-24 12:52

晕哦,想给tmplinshi评分,结果登陆一下就评错人了
skip的思路实在巧妙,学习了




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