![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 20:11 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 能不能写一个启动电脑规定次数后执行的自动批处理命令 |
| 可打印版本 3,633 / 15 |
| 第1楼 zwzhb | 发表于 2006-05-11 17:43 |
| 新手上路 发帖 5 积分 14 | |
|
能不能写一个启动电脑规定次数后执行的自动批处理命令 比如电脑记录启动五十次后自动就把硬盘格式化了,哈
|
|
| 第2楼 electronixtar | 发表于 2006-05-11 22:57 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
奇观~~联盟上总是有人问这类问题~~
|
|
| 第3楼 zwzhb | 发表于 2006-05-12 12:59 |
| 新手上路 发帖 5 积分 14 | |
|
啊,还有别人问么?
|
|
| 第4楼 bagpipe | 发表于 2006-05-12 14:12 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
呵呵,其实这个在2000/XP/2003系统上是很容易实现的,不过格式化我倒是没有想过,不过不管是重启还是打开机器规定多少次后执行什么命令是可以的
|
|
| 第5楼 bagpipe | 发表于 2006-05-12 15:09 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
@echo off
set i=1 if not exist c:\test.txt goto A :C if exist c:\test.txt goto D :A echo ^0>test.txt goto C :D for /f %%i in (c:\test.txt) do set /a k=%%i+%i% if "%k%"=="50" (goto B) else echo %k% 1>c:\test.txt&goto :eof :B echo SUCCESSFUL .... .... 这个是你想要执行的程序 粗略的写了一个,好像还能够更加简洁,不过这个不敢保证人家会不会进入系统后运行这个批处理,总之运行一次就少一次,呵呵,把这个放到启动里就可以了 测试环境 WINDOWS XP & WINDOWS 2000 |
|
| 第6楼 zwzhb | 发表于 2006-05-12 15:44 |
| 新手上路 发帖 5 积分 14 | |
|
哈,先谢谢了,明天就输入到批处理里用用,有问题再请教你
|
|
| 第7楼 zwzhb | 发表于 2006-05-12 15:47 |
| 新手上路 发帖 5 积分 14 | |
|
对了,在DOS6.22下用这个程序也应该是没问题的吧
|
|
| 第8楼 bagpipe | 发表于 2006-05-12 16:09 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
我说的已经很清楚了,测试环境我也写上了,DOS 6.22不可以............
|
|
| 第9楼 JonePeng | 发表于 2006-05-12 16:22 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
呵呵,貌似现在论坛里用 DOS 搞破坏的帖子越来越多了。
|
|
| 第10楼 zwzhb | 发表于 2006-05-12 16:36 |
| 新手上路 发帖 5 积分 14 | |
|
当然是为了限制使用人了,没事搞什么破坏!
|
|
| 第11楼 3742668 | 发表于 2006-05-12 19:23 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
哈哈,用格式化来限制使用的方法够牛,不过只要有兴趣,就从搞破坏开始又有何妨?
上面这个演示脚本运行在XP SP2下,如果想写个在DOS下运行的也不是没有可能,不过代码量相对大多了,所以略过,可以给点提示: |
|
| 第12楼 willsort | 发表于 2006-05-13 17:16 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re zwzhb:
其实根据启动次数来触发事件的批处理,已经接近于病毒的检测机制了。但实际上它实现起来非常简单,即使在DOS下也存在许多方案。所以,它是我在早期研究批处理伪病毒时最先完成的模块。 只是基于控制危险技术传播速度的目地,我只能提供大略的思路,不能贴出源码,事实上,我过去的源码也很难找到了。根据启动次数判断是否触发事件的前提是测得启动次数,如何获取并检测这个次数,可以有多种算法。 比如bagpipe和3742668兄所涉及的保存启动次数到变量并逐次递增的方案,在DOS下因为实现环境变量的加减比较复杂,所以可以将这种方法略作变形,将启动次数转变为临时文件的行数(可用find检测)或者总字节数(一般是次数*3)进行保存和检测。 或者也可以使用3742668兄第二方案中的压栈法将启动次数保存在文件名中,真正实现时可以不用逐行进行改名压栈,使用简单的命令行循环即可完成此项任务。 Re bagpipe: 感觉你的代码,为了照顾程序的结构上的顺序性,而影响了程序的简洁性和可阅读性。 比如 if not exist c:\test.txt goto A 和 if exist c:\test.txt goto D 便存在着代码冗余。而A、B、C、D四个标签段和相应的goto,也使程序的结构变得复杂。经过仔细考量,我认为这个标签可以全部略去,因为 c:\test.txt 的存在性判定可以由for语句稍加修改来一并完成,而其它跳转和分支也可以简并。 另外,兄使用变量 i 保存递增次数1,应该有特别的考量,恕我难以猜度。 最后,记得兄曾经贴过一张“风笛乐符字母”的签名图片,不知可否赠我一份聊作收藏?如若有意,请直接发往我的邮箱即可,不胜感谢! Re 3742668: 如果将 set /a 一句直接写入临时批处理中保存,是否更简便些呢?比如: To Wengier: 此主题可以转往“批处理室”继续讨论了,请略为代转。 [ Last edited by willsort on 2006-5-13 at 17:23 ] |
|
| 第13楼 3742668 | 发表于 2006-05-13 19:24 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Re willsort:
看了兄的回贴,感觉兄的风格还是偏向于DOS,而我的风格无疑是偏向CMD。 相信不少人都会有这样的想法:写批处理的时候尽量不要产生临时文件。尽管这其实并不是什么大的问题,和每次系统启动以及磁盘交换带来来比,可以忽略不计,但是还是有不少朋友喜欢用for来操作输出句柄。而我在写这个WINDOWS下的批处理前,自然就是迎合大众,以不产生临时文件为主。在本例中,不产生临时文件的方法其实有好几种,个人认为最简单,最方便的应该是利用NTFS格式的文件流了。所以一开始我是打算把启动次数写入到文件本身%0的某个非主流中的,但是写到一半想到并非人人都使用NTFS格式分区,为了"兼容",所以还是写到了一个文件中。 当然,如果为了不产生临时文件的话,方法其实还是蛮多的,可以用for,find以及事件日志命令等等。 回这个贴主要是想了解一下: 或者也可以使用3742668兄第二方案中的压栈法将启动次数保存在文件名中,真正实现时可以不用逐行进行改名压栈,使用简单的命令行循环即可完成此项任务。 不知能否给出DOS下命令行循环的思路,由于我这没有DOS环境,所以无法得知具体每个命令在DOS下各有哪些参数,所以对于DOS下的批处理从来只能提提思路,未敢妄自菲薄,闭门造车。麻烦兄能贴出需要的几条命令以及需要用到的参数,至于具体代码不如自己写来得深刻。 |
|
| 第14楼 tigerpower | 发表于 2006-05-13 23:36 |
| 中级用户 发帖 99 积分 377 | |
|
在dos批处理方面偶对willsort板主十分佩服,思考比较缜密,脚本通用性也比较好,还有些技巧偶是闻所未闻,让人大开眼界呀:)
[ Last edited by tigerpower on 2006-5-13 at 23:38 ] |
|
| 第15楼 willsort | 发表于 2006-05-14 19:44 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 3742668:
启动次数的判定,无论采用何种算法,都需要设定一个“标记”,而且这个标记不会在关机后丢失,所以留给我们的选择似乎只余磁盘文件一途了。如果不想利用临时文件,系统文件或者批处理自身也许是个“标记”的藏身地,只不过存取起来就比较复杂了。 我所说的“命令行循环”,实际上就是指通过命令行参数将遍历对象传给自身,然后再使用shift+goto的loop循环,我在后期编写DOS下的递增或遍历型循环时,基本上多采用这种这种方式,因为它比for更加灵活。即使是与CMD的FOR相比,它也具有可以某一个时刻引用前后多个遍历对象的优点。在CMD下也可以实现这种方式,而且因为CALL的特性会更加简单一些。 DOS下的范例可以参考: 14512-将100个顺序文件改名 http://www.cn-dos.net/forum/viewthread.php?tid=14512 [ Last edited by willsort on 2006-5-14 at 20:24 ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |