中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]逐行读词 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  [原创]逐行读词

原贴发表于http://bbs.verybat.cn/viewthread ... light=%2Bzw19750516
@echo off&mode con cols=40 lines=26&color 1f
::     沁园春.雪-毛泽东
::  北国风光,千里冰封,万里雪飘。
::  望长城内外,惟余莽莽;
::  大河上下,顿失滔滔。
::  山舞银蛇,原驰蜡象,欲与天公试比高。
::  须晴日,看红装素裹,分外妖娆。
::  江山如此多娇,引无数英雄竞折腰。
::  惜秦皇汉武,略输文采;
::  唐宗宋祖,稍逊风骚。
::  一代天骄,成吉思汗,只识弯弓射大雕。
::  俱往矣,数风流人物,还看今朝。
title 逐字读词
:begin
echo.&echo.
set /a n+=1,m=-1
for /f "skip=%n% delims=:: " %%i in (%~fs0) do set str=%%i&goto lp
:lp
set /a m+=1
call,set var=%%str:~%m%,1%%
call,set /p=%var%<nul
if defined var (for /l %%i in (1,1,4000) do echo.>nul&goto lp)
if %n% lss 11 goto begin
pause>nul




批处理之家新域名:www.bathome.net
2008-6-20 13:33
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
hackerscans
初级用户





积分 73
发帖 51
注册 2007-8-31
状态 离线
『第 2 楼』:  

经典的就是经典,高手就是高手

2008-6-20 14:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wl00560
银牌会员





积分 1384
发帖 709
注册 2005-10-29
状态 离线
『第 3 楼』:  

厉害,学习了……

2008-6-20 14:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingfushuan
高级用户





积分 502
发帖 327
注册 2006-12-30
状态 离线
『第 4 楼』:  执行不了

执行不了,肯定是小毛病哈,学习思路了

[ Last edited by qingfushuan on 2008-6-20 at 03:14 PM ]

2008-6-20 15:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingfushuan
高级用户





积分 502
发帖 327
注册 2006-12-30
状态 离线
『第 5 楼』:  这样就可以执行了,我有点小问题请教

@echo off&mode con cols=40 lines=26&color 1f
::     沁园春.雪-毛泽东
::  北国风光,千里冰封,万里雪飘。
::  望长城内外,惟余莽莽;
::  大河上下,顿失滔滔。
::  山舞银蛇,原驰蜡象,欲与天公试比高。
::  须晴日,看红装素裹,分外妖娆。
::  江山如此多娇,引无数英雄竞折腰。
::  惜秦皇汉武,略输文采;
::  唐宗宋祖,稍逊风骚。
::  一代天骄,成吉思汗,只识弯弓射大雕。
::  俱往矣,数风流人物,还看今朝。
title 逐字读词
:begin
echo.&echo.
set /a n+=1,m=-1
for /f "skip=%n% delims=:: " %%i in ('type %0') do set str=%%i&goto lp
:lp
set /a m+=1
call,set var=%%str:~%m%,1%%
call,set /p=%var%<nul
if defined var (for /l %%i in (1,1,4000) do echo.>nul&goto lp)
if %n% lss 11 goto begin
pause>nul

请指导一下下面的内容
call,set var=%%str:~%m%,1%%
call,set /p=%var%<nul
if defined var (for /l %%i in (1,1,4000) do echo.>nul&goto lp)
if %n% lss 11 goto begin

2008-6-20 15:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  



  Quote:
call,set var=%%str:~%m%,1%%
call,set /p=%var%<nul
if defined var (for /l %%i in (1,1,4000) do echo.>nul&goto lp)
if %n% lss 11 goto begin

call,set var=%%str:~%m%,1%%,这是逐行逐字符截取命令,%str%是行的变量,而%m%是从0一直向上递加的(每次加1),这样就实行了对词的每行的逐字截取并赋值给变量%var%;
call,set /p=%var%<nul,echo 是换行输出命令,而set /p是不换行输出命令,当一行中还在截取字符时,新的字符总是紧跟输出的最后一个字符后被输出;
if defined var (for /l %%i in (1,1,4000) do echo.>nul&goto lp)这句的意思是如果存在不为空的变量%var%刚进行对程序延迟设定时间后再继续运行;
if %n% lss 11 goto begin,如果变量n(也是每次递加1)的值小于11(词有11行),则返回begin标签处进行下一轮循环。



批处理之家新域名:www.bathome.net
2008-6-20 15:54
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 7 楼』:  

完全没一点新鲜内容。就不要写什么原创了。

2008-6-20 20:53
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: