![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 14:07 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [分享]批处理编程的异类 |
| 可打印版本 31,763 / 50 |
| 第1楼 willsort | 发表于 2004-01-11 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
[分享]批处理编程的异类 学过DOS的人,或多或少都听过批处理。它小巧轻便,而且是系统级源代码解释,不用编译和连接而直接运行,曾经吸引了不少DOS的爱好者和编程者。众多人士的参与,无数奇思妙想的涌现,构成了批处理编程中的"异类"。它们并不是单纯为解决某些"成批处理的问题"而设计,而是真正将批处理做为一种语言,来体现它无限的创造力。 下面是我搜集的一些批处理程序,他们或许并非是技术上的精品,但绝对是构思上的突破。我会不断的更新和完善这个主题,也希望大家同我一道努力,完成这个"异类"收藏。 索引 ====== 1楼:本主题 2楼:游戏(Game): 1、三子棋(TicTacToe) 3楼:数学(Math): 1、随机数(Random)生成、随机矩阵生成,共2个 2、2K/XP表达式计算 4楼:时钟(Clock): 1、暂停(Pause)、延迟(Delay)、等待(Wait)或睡眠(Sleep),共5个 声明 ====== 1,为保持本帖的结构,仅为赞美和支持的同志请尽量不要在此回帖; 2,对本帖某些程序有任何疑问和建议的朋友,请访问下面的主题 http://www.cn-dos.net/forum/viewthread.php?tid=12388 3,有意推荐程序的朋友,请注意以下的选择标准: (1),程序实现的功能具有一定的通用性和创新性; (2),程序不依赖于任何特殊或定制的本地环境(比如程序的路径); (3),程序未使用任何第三方工具或者软件; (4),程序最好适用于所有的 Windows 和 DOS 平台,如有特殊要求请注明; 4,本主题采用淘汰制,即完成相同或相似功能的代码将采用编写质量最优秀者,无法区分优劣时,或者同时在一帖内列出,或者融合二者的优秀之处改遍成新的代码;被淘汰者或者单独发表主题列出,或者列出可引用的链接。 更新记录 ====== 2004.06.20: 发出"批处理编程的异类"主题,并与"批处理编程的异类"互相链接 2005.07.16: 更新7楼的 prompt 变量获取程序 2005.08.18: 修改3楼为数学(Math)主题,并增加随机数和随机阵列生成程序 2005.08.19: 修改4楼为时钟(Clock)主题,增加“暂停”程序5个 2005.09.11: 3楼数学(Math)主题增加“2K/XP表达式计算批处理” [ Last edited by willsort on 2005-9-11 at 13:35 ] |
|
| 第2楼 willsort | 发表于 2004-01-11 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
批处理编程异类——游戏(Game) 程序:TicTacToe(三子棋、井字棋、打井、提担挑)
作者:M0eRtH 原文:TicTacToe (a.k.a. Noughts''''''''n''''''''Crosses) BATch version 1.1 http://users.volja.net/sarcasmus/M0/tictactoe/tttbat.html 下载:http://users.volja.net/sarcasmus/M0/tictactoe/tictactoebat.zip 环境:1,程序应该在英文的命令行环境下运行; 2,程序使用了大量的环境变量,应该修改程序运行时环境空间的大小; 3,程序在WIN2K/XP运行需要CHOICE的支持; 备注: 这是我见到第一个用批处理编写的真正具有游戏性的程序,虽然程序并不提供AI对手,但是其优美的结构仍然值得称道。正文中出现的乱码字是因为作者使用了ANSI的表格字符。 同类: 福尔摩斯问答:http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=6&ID=8272 ZD庄园的迷魂阵:http://zdland.xiloo.com/planets/psa.html 正文: @echo off |
|
| 第3楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
批处理编程的异类——数学(Math) 1、数学——随机
1)随机数发生器:运行后可产生一个00~99的随机整数,并保存于环境变量 %_random% 中。 如果要产生更复杂的随机数,也可以利用这个程序进行修改来得到,比如两次产生的随机数组合,即可得到0000~9999的随机数;在随机数前加上小数点,即可得到0.00-0.99的随机小数;将 prompt _$T$_:: 中的第一个下划线去除,可以得到0~9的随机数;用debug可以去除某些随机数的前缀0。根据以上方法,即可组合得到任意形式的随机数了。 2)随机阵列发生器:运行后将生成一张随机概率分布矩阵图。 此图24行63列,由字符“-”(假)和“o”(真)组成,从上到下每三行为一组,呈现出o的分布概率依次降低。其中矩阵中的左图为真假序列分布,右图为真假数目对比。 2、数学——表达式 1)2K/XP表达式计算批处理,由 Brglng 原创并维护。转帖时精简了程序中的文档部分,可以通过以下链接查阅完整的代码和文档。 {16534}2K/XP表达式计算批处理 http://www.cn-dos.net/forum/viewthread.php?tid=16534 [ Last edited by willsort on 2005-9-11 at 13:37 ] |
|
| 第4楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
批处理编程的异类——时钟(Clock) 1、暂停(Pause)、延迟(Delay)、等待(Wait)、睡眠(Sleep)
1)for+set+if,时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。 利用for解析变量%time%并存为两个时间点%start%和%now%,再利用set /a计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。 2)VBS脚本中的sleep函数,时间精度为0.001秒,使用平台为Win9x/WinNT系列。 动态创建一个调用sleep()函数的VBS脚本,然后用Windows脚本宿主的命令行版本cscript调用它。 3)ping的消息发送间隔,时间精度为1秒,使用平台为Win9x/WinNT系列。 需要你的Windows系统中正常安装了网卡的TCP/IP协议,有两种方案,方案二不建议采用,见主题 批处理编程的异类 12、13楼: (1) 利用ping两次发送消息之间的间隔时间。ping在发送多个消息时,在得到上一次消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间因机型、系统和网络配置而不同,其中IP地址尤其关键,只有本地的回送地址 127.0.0.1 因为是立即回应所以才是相对恒定的,其他地址大多会产生显著的差异。此种方法要等待更大的时间,是指定发送的消息数为等待的时间加一,因为第一个消息是不等待的,IP 地址必须是 127.0.0.1 。其等待2秒的程序如下: (2) 利用ping的最大等待时间。ping向0.0.0.1发送一次“网际消息控制协议 (ICMP)”回响请求消息,因为 0.0.0.1 是个无法响应 ping 请求的IP地址,所以默认情况下,ping会等待一定的最大响应时间——4秒后便停止等待,而-w可以改变这个每发送一次消息所等待的最大响应时间。而如果将 IP 地址改为立即响应的127.0.0.1或其他响应时间很短的IP ,那 -w 便失去了作用,因为每次发送等待时间都不会达到最大的响应时间,此时延时会缩短。此种方法要等待更大的时间,可以直接使用 -w 指定,但是需要减去一定的发送延时,这个延时需要自己事先测定一下,否则会有不到1秒的误差;而且 IP 地址必须是不响应请求的地址。其等待2秒的程序如下: 4)choice的缺省选择等待功能,时间精度为1秒,适用平台为MS-DOS/Win9x/WinNT系列。 /t:y,2 将缺省选择字符设置为y,等待时间是2秒,/n禁止提示出现在命令行上,“rem|”的作用是禁止choice从键盘接受按键,从而暂停不会因为按下y或者其它键而被意外终止。 5)ASCII汇编代码,延迟精度为0.001秒,适用平台为MS-DOS/Win9x/WinNT。 德国人Herbert Kleebauer给出了一个通用方案,通过ASCII汇编器间接产生一个sleep.exe程序来实现延迟,这个程序分为DOS和Win两个模块,分别调用DOS系统中断服务和WindowsAPI。 |
|
| 第5楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个用字符方式画图的程序,原文来自网易广州站DOS版。 http://fe2.gz.163.com/cgi/readsrh?b=DOS&t=15763&i=15763&al=5&n=0&l=40&back=2&st=0&kw=MAP 这个程序的工作方式很简陋,不过已经具备了一些基本的功能,比如画,擦,更换画笔字符,保存和提取字符画,备份和恢复字符画,使字符画可执行化等。程序用到了ANSI.SYS 的支持功能,所以 ECHO 后的方框字符实际上是 ASCII 码为27的符号,可在DOS下的 EDIT 中按 CTRL+P 然后按 ESC 输入此字符。 ------------------------------------
|
|
| 第6楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是个在命名行提示上画一只字符小狗的程序,原文来自网易北京站的DOS版。 http://fe4.bj.163.com/cgi/readsrh?b=DOS&t=38819&i=38819&al=5&n=0&l=40&back=2&st=0&kw=DOS%B5%C4%CD%BC%D0%CE 程序需ANSI支持。其中存在缺陷,解决的方法请查询原网址。 --------------------------------------
|
|
| 第7楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个获取PROMPT系统状态数据的程序,原文来自网易广州站的DOS版。
http://fe2.gz.163.com/cgi/readsrh?b=DOS&t=25501&i=25609&al=5&n=0&l=40&back=2&st=1&kw=willsort 运行时,加上存放数据的变量名和prompt对应变量名即可,如: getvar curver $v 可以提取的系统状态数据有: $T Current time $D Current date $P Current drive and path $V System version number $N Current drive ------------------------------------ ------------------------------------ 2005.07.16 更新: [ Last edited by willsort on 2005-10-29 at 12:36 ] |
|
| 第8楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个定时器程序,原文来自网易广州站的DOS版。 http://fe2.gz.163.com/cgi/readsrh?b=DOS&t=13486&i=15375&al=5&n=40&l=40&back=2&st=1&kw=willsort 程序中的 CURRENT.BAT 可以更换为自己需要执行的内容。FIND 一句的时间可以根据自己的需要设定,也可用参数%1代替。还可以改为 TIME 改为 DATE 以完成的定期执行的功能。 ------------------------------
|
|
| 第9楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
批处理编程的异类——网络(Network) 1、共享
1)删除win2k/xp系统默认共享 原文来自《批处理简明教程》 http://www.realhack.org/article/articleshow.asp?ArticleID=954 2)PING某个区段内的所有IP的程序 原文来自网易北京站的DOS版。 http://fe4.bj.163.com/cgi/readsrh?b=DOS&t=94897&i=96159&al=5&n=0&l=40&back=2&st=1&kw=willsort 在命令行输入 a.bat 0 1 2 3 4 5 6 7 8 9 ,就能显示某区段的所有 IP 地址 192.168.1.0 - 192.168.1.99 ,将其中的 echo 改成 ping 就行,其中的 choice 和 if 语句是等待用户判断是否继续,可以删除,但这样中断程序比较麻烦。 [ Last edited by willsort on 2005-8-19 at 17:17 ] |
|
| 第10楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个修改文件的更新日期的程序,原文来自网易北京站的DOS版。 http://fe4.bj.163.com/cgi/readsrh?b=DOS&t=85861&i=85878&al=5&n=0&l=40&back=2&st=1&kw=willsort 原文代码中有若干错误,下为修正版。 --------------------------------------
|
|
| 第11楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个文件遍历程序,原文来自网易广州站的DOS版。 http://fe2.gz.163.com/cgi/readsrh?b=DOS&t=21718&i=21882&al=5&n=0&l=40&back=2&st=1&kw=willsort 原文中用到了两个外部程序,VARSET 和 LMOD,可能在本站或者新DOS时代就有下载。 ----------------------------------
|
|
| 第12楼 willsort | 发表于 2004-01-12 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
以下是一个接收键盘输入字符串的程序,原文来自本站教学室。 http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=12&replyID=34149&ID=5283&skin=1 此文的关键技巧在于 FC 和 DEBUG 的巧妙结合使用。%TEMP%.\filename.ext 的用法也很有技巧性。%%?的用法也很新鲜。 ---------------------------------------
|
|
| 第13楼 pizigao | 发表于 2004-01-13 00:00 |
| 银牌会员 发帖 292 积分 1,063 | |
|
ding
|
|
| 第14楼 pizigao | 发表于 2004-01-13 00:00 |
| 银牌会员 发帖 292 积分 1,063 | |
|
willsort大哥,帮忙看看我的帖子
http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=9&ID=8920 |
|
| 第15楼 zww3008 | 发表于 2004-01-14 00:00 |
| 初级用户 发帖 21 积分 197 | |
|
这些都是很精典的批处理程序,很值得初学者学习参考体味,如果不希望贴子灌水的话,那就请版主置顶吧!不要让贴子沉了。
|
|
| 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |