![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 02:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [原创]批处理学习帖④ 退格符在批处理中的应用 |
| 可打印版本 1,895 / 3 |
| 第1楼 q8249014 | 发表于 2009-12-03 19:32 |
| 初级用户 发帖 45 积分 175 | |
|
[原创]批处理学习帖④ 退格符在批处理中的应用 批处理学习帖④ —— ASCII 08 号字符 退格符在批处理中的应用
这里讲解一下 ASCII 08 号字符 退格符在批处理中的应用,也算是给大家补充讲解一下“文本阅读器” 中的“<nul set /p= !str:~0,1!”这一段代码是怎样做到兼容输出等号和引号的 为了方便理解,这里我把“文本阅读器”中退格符“”前面的空格替换为“?” 因为空格符号在即使在屏幕中输出了,大家也看不到,所以用“?”代替一下 “原创文章,转帖请注明出处cn-dos&q8249014哦” 一、理论讲解 执行代码1输出结果显示为“?” 不是说“”可以删除它前面的“?”吗?那么输出的结果应该为空啊,可为什么代码执行完毕输出结果还显示“?”呢? 我们首先来分析一下代码1的执行过程 (1).当cmd读取完毕“set/p=?"”这条语句后,进行一些必要的预处理工作 (2).把命令语句提交给set执行 (3).set命令在对这些语句进行处理 (4).命令得到执行,将结果返回到cmd窗口中(控制台)“?” (5).这时cmd窗口接收到“”,就相当于按了一次退格,但是窗口中任然显示“?” 在ASCII字符中退格符、换行符和回车符都没有图形表示,不同的应用程序在接收到这些字符后都会进行相应的处 理,比如记事本、word,而输出到cmd窗口(控制台)中的内容也属于文本文字,所以当cmd窗口接收到“”退格字 符后默认也会对它进行相应的处理。如果不输出到cmd窗口(控制台)退格符就不会被处理。 现在你可以打开一个记事本,输入一个字符,然后按住alt键不放再按数字键盘上的0和8然后松开alt键,怎么样, 输入的字符被删除了吧,其实这时候记事本将你“按alt键……”输入的字符当作退格处理了 好,下面回到主题。 在以上过程的第4步中,cmd接收到了“?”,这时实际显示为“?”,同上,由于退格符的特殊性cmd会对他进行处理, 理论上应该是删除掉前面的字符“?”,但是请注意cmd处理完毕“”退格符后,cmd窗口就 再也没有接收到其他可显示的字符,所以cmd窗口没有被刷新,那么窗口中自然显示的还是“?”,也就是说cmd窗口中 显示的内容是第4步运行完毕的轨迹。 好,请同学们在运行一下代码1,然后随便在cmd窗口中输入一些内容,看一下“?”是不是没有了? 作业:运行一下代码2,再结合上面的分析,自行分析一下代码2 细心的同学可能还会发现,代码1和代码2执行后闪动的光标在cmd窗口中的位置都不一样,这就更好的解释了代码1 中显示的“?”是一个轨迹 代码3将内容输出到文本中,没有经过cmd窗口(控制台),所有就没有处理退格符,大家执行下试试 同学们想想看,我为什么不用记事本打开“test_.txt”让大家查看而用“edit”呢? 提示:文件头?Unicode 二、实例演示 “原创文章,转帖请注明出处cn-dos&q8249014哦” 1.这个搞笑开机不同于网上流传的那种,因为没有使用cls命令,所以不会出现震动的感觉 网络上也流传过一个使用VBS脚本进行处理版本的,也不会出现震动的感觉 2.本论坛中bagpipe写的“幻影”特效 3.下面这段代码也是本论坛中bagpipe写的“星星”特效,代码中“color 0!e:~%f%,1!”这一句有些错误不 过由于goto的存在变色倒是没有什么问题 ,要想观看另一种变色效果应修改两处代码,正确的代码应改为 “call color 0%%e:~!f!,1%%” 和 “set /a f=!random!%%14+1” 4.下面这个是我仿写bagpipe的“幻影”特效,同学们比较一下有什么不同 5.下面这段代码也是本论坛中bagpipe写的“星星”特效,还是按照bagpipe的写法,我对这段代码进行 了一些简单的“修整”,使显示效果更好一些,同时也增加了星星的数量。这段代码写的还是有点繁琐, 但是还是贴出来让同学们比较一下 6.下面是不同的几种“星星”显示效果 为了方便阅读 统一采用以下这种格式编写 这个代码同学们可以和上面那段比较一下 9.幻影 and 走马灯 这一节给出的演示代码较多一些,一共10个,其中有几个基本上都是一样的,只是为了演示不同的效果 而有一点区别,同学们举一反三,还可以写出更好玩的代码。 以上所有的代码中,同学们可以选择一个自己感兴趣的代码分析一下 “原创文章,转帖请注明出处cn-dos&q8249014哦” [ Last edited by q8249014 on 2010-1-17 at 18:45 ] |
|
| 第2楼 740011611 | 发表于 2009-12-18 18:14 |
| 初级用户 发帖 83 积分 96 来自 信阳 | |
|
cd|set/p=
set/a b=%random%%%15 分别是什么意思? |
|
| 第3楼 q8249014 | 发表于 2010-01-17 18:44 |
| 初级用户 发帖 45 积分 175 | |
|
cd|set/p= [延时]
set/a b=%random%%%15 [取余]--[产生随机数] |
|
| 第4楼 explor | 发表于 2010-10-24 19:56 |
| 初级用户 发帖 14 积分 30 | |
|
set/p"= CN-DOS"
这一句里等号在引号外和引号内完全是不同的结果,这是为什么? |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |