![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 11:36 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 再论逐行显示文本之疑问 |
| 可打印版本 928 / 3 |
| 第1楼 #four# | 发表于 2006-11-22 21:27 |
| 中级用户 发帖 34 积分 209 | |
|
再论逐行显示文本之疑问 本人看了关于逐行显示文本的批处理后,自已也试写了一下,发现了几个问题,希望论坛里的高手能给我解释解释。我先用下面这个批处理显示文件文本时能正确显示。
@echo off setlocal enabledelayedexpansion for /f "delims=" %%i in (1.txt) do (call;:put;"%%i") :put set p=%1 set a=0 :start if "!p:~%a%,1!"=="" ( :end echo/&echo\ ) else ( set/p=!p:~%a%,1!<nul ping 127.1 -n 1>nul set /a a+=1 goto start ) 对于以上批处理我是这样理解的,首先FOR语句从文件1中读取一段到变量I,然后再调用:PUT函数,在:PUT函数中把变量I的内容传给变量P,再对P的第一个字符开始判断,如果该字符变量为空,则输出一空行后,跳出:PUT函数,继续FOR循环,提取下一变量。否则逐个显示该变量中的字符(包括空格)直至该字符尾,跳出:PUT函数,继续FOR循环,提取下一变量。所以能正确地显示。然而我对以上批处理改成如下:(修改start标签的位置和加了一条判断跳转指令) @echo off setlocal enabledelayedexpansion for /f "delims=" %%i in (1.txt) do (call;:put;"%%i") :put set p=%1 set a=0 if "!p:~%a%,1!"=="" ( :end echo/&echo\ ) else ( :start set/p=!p:~%a%,1!<nul ping 127.1 -n 1>nul set /a a+=1 if "!p:~%a%,1!"=="" goto end goto start ) 后,发现正常显示一段后,就不停的显示空行,好像不停的在执行if "!p:~%a%,1!"=="" goto end 这段代码。而我认为执行了上句判断跳转指令后输出一空行后应该跳出:PUT函数,再提取下一个字符变量。为什么会出现这样的结果,是我对这段批处理理解错误了,还是两个GOTO语句惹的祸。希望版主或其它高手能给我解答。 |
|
| 第2楼 chenall | 发表于 2006-11-22 21:44 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
在:put前放一个goto :eof
具体原因自己看看吧. |
|
| 第3楼 #four# | 发表于 2006-11-22 21:48 |
| 中级用户 发帖 34 积分 209 | |
|
是不是:end放在else前,运行end后会继续运行else后的代码。
|
|
| 第4楼 hxuan999 | 发表于 2006-11-24 05:09 |
| 中级用户 发帖 161 积分 337 | |
if "!p:~%a%,1!"=="" goto end if "!p:~%a%,1!"=="" ( 这不是一样吗,为什么要多此一举的分开呢? 有错是因为:
goto end 后并不是执行了上面的那个if语句,所以就顺序执行了.当然一直执行 if "!p:~%a%,1!"=="" goto end. [ Last edited by hxuan999 on 2006-11-23 at 05:11 PM ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |