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

[文本处理] 批处理怎样查找行数?

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

  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
复制代码

TOP

示例如下:
  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
复制代码
***共同提高***

TOP

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
复制代码
***共同提高***

TOP

谢谢batman,解决

TOP

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

评分人数

TOP

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

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

但是真心希望楼主不是。。。
***共同提高***

TOP

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

下次注意,顺便问一下变量延迟有效率的问题是么?

TOP

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

评分人数

TOP

2# TX_kakashi
其实一个SET /A N+=1就可以了
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

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

TOP

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

了解了,有点强迫症,看到n+=1就有点不喜欢的感觉..下次注意,下次注意...

TOP

9# terse


type a.txt|find /v /c "" 可以换成 find /v /c "" <a.txt

TOP

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

看来还是FINDSTR /N准确。用FOR /F 的话。命令会把回车符当作分组符号,也就是说当一行只有一个回车时,不会被处理
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

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

TOP

返回列表