标题: [文本处理] 批处理怎样查找行数? [打印本页]
作者: dabei1974 时间: 2011-3-24 10:13 标题: 批处理怎样查找行数?
我想实现以下效果:查看文本A.txt中是否有100行,如果有就跳转到yes,如果没有就跳转到no。我以前用的是把行号写到一个新文本b.txt,然后find b.txt查找是否有有100这个数字,感觉太麻烦,也不正规,特此请教,谢谢。
作者: TX_kakashi 时间: 2011-3-24 10:30
- @echo off&setlocal enabledelayedexpansion
- set count=0
- for /f "tokens=*" %%a in ('type a.txt') do (
- set /a count=!count!+1
- )
- echo !count!
- pause
复制代码
作者: batman 时间: 2011-3-24 10:35
示例如下:- @echo off
- for /f "delims=:" %%a in ('findstr /n .* a.txt') do if %%a equ 100 goto yes
- :no
- echo bathome
- pause>nul&goto :eof
- :yes
- echo batman
- pause>nul
复制代码
作者: batman 时间: 2011-3-24 10:43
2# TX_kakashi
不可滥用变量延迟:- @echo off
- for /l %%a in (1,1,100) do set /a n+=1
- echo %n%
- pause>nul
复制代码
作者: dabei1974 时间: 2011-3-24 10:52
谢谢batman,解决
作者: tmplinshi 时间: 2011-3-24 10:57
- for /f "skip=99" %%a in (a.txt) do goto yes
- 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
这个计算空行的- 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 |