中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 09:09
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助] For 在读取txt时莫名退出
可打印版本  837 / 6
第1楼 terrytong 发表于 2010-05-09 13:11
中级用户 发帖 115 积分 240
[求助] For 在读取txt时莫名退出
现有一个txt文件(B12.txt,如附件), 我用FOR计算里面的PASS和FAIL的数量,但是不知道为什么数量总是不对.
代码如下:
@echo off
setlocal enabledelayedexpansion
set P=0
set f=0
for /f "tokens=1 delims==" %%a in (B12.txt) do (
set result=%%a
set result=!result: =!
if !result! == PASS set /a P+=1
if !result! == FAIL set /a F+=1
)
echo !pass!
echo !Fail!
pause

发现每次FOR只能读到577行就会退出.
然后我打开B12.txt, 直接保存下再读,数量就会正确了,可是怎么也想不通,为什么我什么都没做,只是打开保存了一下就可以读出正确的数值?
请高手们帮我看看是什么原因倒致我刚开始读的数量不正确?
谢谢!

[ Last edited by terrytong on 2010-5-9 at 13:13 ]

附件
B12.rar (15.14 KiB)
第2楼 tongzj 发表于 2010-05-09 13:43
初级用户 发帖 43 积分 49
应该是文本格式错误,重新保存后格式修正了就好了。

[ Last edited by tongzj on 2010-5-9 at 13:45 ]
第3楼 terrytong 发表于 2010-05-09 14:23
中级用户 发帖 115 积分 240
请问除了手动打开再保存后还有更好的办法修正格式错误?
另外想问下一般什么样的情况下会导致这种格式错误啊?
第4楼 yishanju 发表于 2010-05-09 14:52
银牌会员 发帖 1,357 积分 1,488
我好像是文本里有些莫明的代码或者字符,批处理会出错
第5楼 Hanyeguxing 发表于 2010-05-09 14:58
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
原因:在第578行行首有连续51个空字符(00),重新保存后转成51个空格符(20)。
解决:more命令自动将00空字符转成换行(空行)
可以使用下面的代码处理:
不能使用下面的代码,因为将导致P被少计算:


[ Last edited by Hanyeguxing on 2010-5-9 at 16:55 ]
第6楼 terrytong 发表于 2010-05-09 16:18
中级用户 发帖 115 积分 240
非常感谢你的帮忙,谢谢!

再请教下,你是怎么看出是空字符还是空格的?
第7楼 Hanyeguxing 发表于 2010-05-09 16:36
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
1,实际上做多了,直接看578行,就能知道是怎么回事
2,打开B12,另存为B13
3,使用下面的代码:
说明:
正在比较文件 B12.txt 和 B13.TXT
***** B12.txt
577: PASS=CVPO017401VW080JGN =2010-04-22 13:01:20=PASS
578:
579:
......中间的被我省略了
628:
629: PASS=CVPO017401XR080JGN =2010-04-22 13:12:12=PASS
630: PASS=CVPO0174020Y080JGN =2010-04-22 13:19:08=PASS
***** B13.TXT
577: PASS=CVPO017401VW080JGN =2010-04-22 13:01:20=PASS
578: PASS=CVPO017401XR080JGN =2010-04-22 13:12:12=PASS
579: PASS=CVPO0174020Y080JGN =2010-04-22 13:19:08=PASS
*****

4,使用下面的命令查看不同的字符是什么:
说明:
正在比较文件 B12.txt 和 B13.TXT
00007348: 00 20
00007349: 00 20
......中间的被我省略了
00007379: 00 20
0000737A: 00 20

5,也可以使用UltraEdit-32等32位编辑器比较。

[ Last edited by Hanyeguxing on 2010-5-10 at 09:53 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023