中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-18 10:35
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,270 会员排行
DOS批处理 & 脚本技术(批处理室) » 无奈何签名代码略析
可打印版本  57,225 / 63
第16楼 lxmxn 发表于 2006-10-20 00:04
版主 发帖 4,938 积分 11,386

  与其说无奈何兄的签名厉害,不如说willsort兄的讲解更精彩…………=_=
第17楼 jieok3375 发表于 2006-10-20 00:36
中级用户 发帖 130 积分 282 来自 广东
学习了……
第18楼 chenall 发表于 2006-10-26 05:29
银牌会员 发帖 469 积分 1,276 来自 福建泉州
经测试13楼的代码,无法正常显示中文.
第19楼 chenall 发表于 2006-10-26 05:42
银牌会员 发帖 469 积分 1,276 来自 福建泉州
13楼的思路不错.
type %1 | find "" /V /N | findstr "^\[[0-9]*\]$" >C:\_tmp_.txt
可以考虑使用.
findstr /n "^$" %1 >C:\_tmp_.txt
再修改一下代码就完美了.
第20楼 chenall 发表于 2006-10-26 06:10
银牌会员 发帖 469 积分 1,276 来自 福建泉州
利用13楼的思路,编写了这个版本.
总算解决了空行的问题.
应该可以算是最终完美版了吧.

第21楼 redtek 发表于 2006-11-06 22:40
金牌会员 发帖 1,147 积分 2,902
这么精彩的又内容欣赏了一遍,哈哈……

[ Last edited by redtek on 2006-11-6 at 10:42 PM ]
第22楼 yuanzijia08 发表于 2006-11-18 11:05
初级用户 发帖 30 积分 78 来自 湖南湘潭
强,,相当强!!!!!
单膝脆地佩服
第23楼 yuanzijia08 发表于 2006-11-18 12:17
初级用户 发帖 30 积分 78 来自 湖南湘潭
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%l in (%1) do (
set line=%%l
for /l %%i in (0,1,80) do (
set /p=!line:~%%i,1!<nul
ping/n 1 127.1>nul
)
echo.
)
pause


为什么这个代码就不能处理!这样的字符呢 别说因为是特殊字符就不能处理 我希望了解不能处理的内在原因 谢谢
第24楼 redtek 发表于 2006-11-18 22:59
金牌会员 发帖 1,147 积分 2,902
Originally posted by yuanzijia08 at 2006-11-18 00:17:
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%l in (%1) do (
set line=%%l
for /l %%i in (0,1,80) do (
为什么这个代码就不能处理!这样的字符呢 别说因为是特殊字符就不能处理 我希望了解不能处理的内在原因 谢谢
...



) 你的23楼的这段代码可以运行~:)
  但需要加参数,因为你 “for /f "delims=" %%l in (%1)” 中指定了%1参数为要读取的文件名,
  所以运行上面批处理时必须指定一个要读取的文件名,例如:

  你23楼的代码文件.BAT   要读取的文本文件名.txt

  按照上面方式运行,就可以把读出的文本文件内容以动画方式显示了~:)


) 你将下面内容存成文本文件,然后用你23楼代码运行并读取这个文件。



  把上面内容命令为: A.TXT

  你的23楼代码.BAT A.TXT  [回车]

  这样就可以动画显示了~:)


) 23楼代码无法读取含有特殊字符的文本内容,例如:= 这个等号。
  yuanzijia08兄可以先试验上面内容,等没有问题了再考虑写出可以显示特殊特殊号的代码~:)
第25楼 redtek 发表于 2006-11-18 23:27
金牌会员 发帖 1,147 积分 2,902
另:

) 为什么特殊字符不能处理?

  是因为当试图以 set /p=!line:~%%i,1!<nul 指令显示含有特殊符号(例如=等号)内容时系统会认为错误。

  为什么系统会认为错误?我们可以分解操作来看到错误的原因:
  现在假设 !line:~%%i,1! 取到的一个字符正好是“=”等号,那么就相当于你执行了:

  

  这时候系统会提示:
  

  上面就是运行结果。

  但如果要显示一个“=”等号以及特殊符号呢?
  

  看上面就可以显示“=”等号了,因为在要显示的“=”等号前面加了个空格的原因~:)

  …………略过n个分析过程…………

  此时候就想一下,如果我前面预先加一个空格,那么再显示文字的时候会怎么样?
  (这个实验请亲自做一下~:)

  …………略过n个分析过程…………

  (实际发现,原来这样达不到要显示的效果,太浪费长度了,哈哈……)
  (怎么办?)
  (再想……)
  (这个时候,会想到,那么怎么才能消掉我多加上的那个空格呢?)
  (这时候就有可能会想起ASCII码特殊控制字符--如何想起来?平时多用,多看这些内容,没看过绝对想不起来)
  (哪些特殊控制字符可以用呢?--如何知道的?全都试过一遍(因为感兴趣就会全试一遍的:)
  (在编程课上或是学C语言的时候也讲过: \n \t 等特殊控制字符……)
  (回想……)

  (很可能在不断的实验中,突然想起了那个传说中的“退格“字符,那它的ASCII码是多少呢?)

  (在ASCII码表上有)

  (n过过程历过了以后…………会想到,那这个字符“退格”我如何输入它呢?)
  (办法多了,用Debug,用vbs,用edit内的Ctrl+P--等等,这个Ctrl+p如何知道的?)
  (多则n天少则几分钟,试呗,有帮助,或偶然间看到的某个资料上写着这样可以,全是经验总结的过程)

  (然后,下一步怎么办?)
  (退格符可以输入了,可以使用了,如何应用呢?)
  (……经过n步的实验会发现怎么字符全没显示出来,全缩转到一起了?)
  (原来退格又删掉了刚显示的内容……等等……再想……这不就是传说中的动画呢?)

  (经过这些步骤的亲自--一定要亲自全玩过一遍,学会了:
     ASCII码
     特殊控制字符
     显示特殊控制字符
     如何延时
     什么是延时变量
     for的技巧操作
     变量的赋值与如何“分割”与“提取”变量的部分内容
     如何计数
     如何输入特殊控制字符,很有可能连debug的输入特殊字符和简单操作也学会了
     如何读文件…………

     太多了,但这一切光看好看还不行,那只是表面上懂了(这个懂很可以是记忆力在帮你死记住它,而不是透彻)

  yuanzijia08兄自己一个一个试吧,这就是学习和自我了悟的过程~:)
  虽然用五笔字型打字和说话的速度一样,字打多了也累~:D

  
第26楼 yuanzijia08 发表于 2006-11-19 11:28
初级用户 发帖 30 积分 78 来自 湖南湘潭
非常非常 感谢redtek大哥的解释 解释得这么清楚 真的很谢谢
但我问个问题啊 我在写批处理的时候都是用记事本 像那个响铃符 (就是在CMD下面 输入Ctrl + G 的那个特殊字符)我应该怎么把那符号输入记事本呢
第27楼 yuanzijia08 发表于 2006-11-19 11:42
初级用户 发帖 30 积分 78 来自 湖南湘潭
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%l in (%1) do (
set line=%%l
for /l %%i in (0,1,80) do (
set /p=!line:~%%i,1!<nul
ping/n 1 127.1>nul
)
echo.
)
pause
上面这个代码 能处理像%这样的字符 但不能处理像!这样的字符

但set /p=!<nul 这个在CMD下面是可以显示为 !的 所以在处理!符号的时候 应该不是set /p=的语法问题 感觉应该是变量延迟方面的问题 我想不出 到底是哪个地方的问题 因为我对变量延迟本来就不太清楚 redtek大哥能给解释下吗
第28楼 redtek 发表于 2006-11-19 23:02
金牌会员 发帖 1,147 积分 2,902
关于27楼不能显示 “!” 符号的问题,它属于延时变量应用上的问题~:)
当上看上面代码,是赋值中含有“!”符号且这个赋值的范围在延时变量开启的范围之内~:)

至于为什么不能处理“!”,做了个延时变量的演示,运行一下就知道啦~:)



运行完上面关于延时变量的演示,就知道了 setlocal EnableDelayedExpansion 并不是可了随便找一个地方放就行了~:)


看完运行完上面的代码,请再仔细揣摩8楼chenall兄的代码,就会明白他为什么要将 setlocal EnableDelayedExpansion 放到一个适合的位置,而不是随便放到代码的开头~:)
可见chenall兄的代码在处理特殊字符以及延时变量的应用上都有着非常深的功底~:)
然后再重新揣摩版主的签名代码,看上去简单的就一两行,但这里面凝缩着多少精华~:)

[ Last edited by redtek on 2006-11-19 at 10:11 AM ]
第29楼 redtek 发表于 2006-11-19 23:16
金牌会员 发帖 1,147 积分 2,902
) 回复第26楼:)

  关于如何输入特殊控制字符详见如下贴子的:第12、14、15以及全贴~:)

如何用“\-/”表示一个进度状态?
http://www.cn-dos.net/forum/viewthread.php?tid=24347&fpage=1
第30楼 ccwan 发表于 2006-11-20 01:52
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
上一页  1 2 3 4 5  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023