中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 09:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助] For 在读取txt时莫名退出 查看 839 回复 6
楼 主 [求助] For 在读取txt时莫名退出 发表于 2010-05-09 13:11 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 240
发帖 115
注册 2008-03-10 19:31
18年会员
UID 112561
性别 男
状态 离线
现有一个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, 下载次数: 7)
2 发表于 2010-05-09 13:43 ·  中国 北京 中电华通通信有限公司
初级用户
积分 49
发帖 43
注册 2007-01-20 03:28
19年会员
UID 77088
性别 男
状态 离线
应该是文本格式错误,重新保存后格式修正了就好了。

[ Last edited by tongzj on 2010-5-9 at 13:45 ]
3 发表于 2010-05-09 14:23 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 240
发帖 115
注册 2008-03-10 19:31
18年会员
UID 112561
性别 男
状态 离线
请问除了手动打开再保存后还有更好的办法修正格式错误?
另外想问下一般什么样的情况下会导致这种格式错误啊?
4 发表于 2010-05-09 14:52 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
我好像是文本里有些莫明的代码或者字符,批处理会出错

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2010-05-09 14:58 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
原因:在第578行行首有连续51个空字符(00),重新保存后转成51个空格符(20)。
解决:more命令自动将00空字符转成换行(空行)
可以使用下面的代码处理:
@echo off
for /f "delims==" %%a in ('type B12.txt^|more') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause

不能使用下面的代码,因为将导致P被少计算:
@echo off
for /f "delims==" %%a in ('type B12.txt') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause

@echo off
for /f "delims==" %%a in ('findstr .* B12.txt') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause


[ Last edited by Hanyeguxing on 2010-5-9 at 16:55 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
terrytong +3 2010-05-09 16:17
6 发表于 2010-05-09 16:18 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 240
发帖 115
注册 2008-03-10 19:31
18年会员
UID 112561
性别 男
状态 离线
非常感谢你的帮忙,谢谢!

再请教下,你是怎么看出是空字符还是空格的?
7 发表于 2010-05-09 16:36 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
1,实际上做多了,直接看578行,就能知道是怎么回事
2,打开B12,另存为B13
3,使用下面的代码:
Fc /n B12.txt B13.txt

说明:
正在比较文件 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,使用下面的命令查看不同的字符是什么:
Fc /b B12.txt B13.txt

说明:
正在比较文件 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 ]
论坛跳转: