标题: 批处理实例现场制作,演示一些常用的操作 [打印本页]
作者: Spring 时间: 2010-1-27 12:40 标题: 批处理实例现场制作,演示一些常用的操作
今天来现场制作一个恶搞程序。。。
练习的知识点:
1. 在批处理中使用输入并保存为变量
2. 对两个值进行判断
3. 模块化地编写代码,以便修改和阅读
4. 创建文件,并在使用后删除
5. 了解一些其他知识
程序的过程是这样的:
首先名字要取得由吸引力,诱使别人来运行,比如“如花的私密自拍.bat”;
运行之后是显示一些文字,让别人输入;
把输入的东西存到变量,然后判断,根据不同的值进行不同的操作。
==========================
好了,开工!
1) 在一个地方,就桌面吧,新建一个文本文档,重命名为 “如花的私密自拍.bat”(不含引号)。
2) 右键“编辑”,开始写代码啦。作为批处理,我们一般都会屏蔽我们输入的命令的显示,因此先加这个再说
复制代码
为了美观,我们再设置一下界面的颜色大小标题什么的,注意如果设置了高度(lines),那么CMD界面就没有滚动条了
- title 绝色美女私密相册
- color 4d
- mode con cols=40 lines=15
复制代码
3) 准备工作弄好了,可以开始写主体了,首先我们必须得到一个输入值,然后才能进行判断,我们把输入的值放入一个叫 mima 的变量里面,变量可以理解为杯子,可以装水,也可以倒掉装酒,它里面的数据是可以随时改变的。
这个功能一行就能搞定,而且可以附带显示一行提示信息,但是如果超过一行,就要自己用 echo 先显示一下了,用 echo. 可以输出一个空行
- echo.
- echo 此相册需要密码才能访问!
- set /p mima=密码:
复制代码
等等,如果别人直接按了回车怎么办呢,得到的是空的值!所以我们可以加一个判断。
在 set 的上一行设置一个标记,叫 shuru 吧(标记的格式是在一行的第一个字符是冒号,后面紧跟这个标记),然后在 set 下一行进行一个判断,看看 mima 是不是空的,如果是空的话就用 goto 回到 shuru 重新让他输入,直到不为空再放行,于是变成这样
- echo.
- echo 此相册需要密码才能访问!
- :shuru
- set /p mima=密码:
- if "%mima%"=="" goto shuru
复制代码
%mima%是什么东西?它就是变量 mima 中存放的值。
4) 好了,现在已经有一个输入值了,可以判断了,现在我们把密码设置成 sb250 ,就是说只有完全符合这个,我们才会进行对的操作,否则的话就不管他跟谁一样了,都执行错的操作,而且操作之后我们的主流程就结束了,因此在判断之后来一个 exit 退出程序。
if "%mima%"=="sb250" (做对的事) else (吓唬他一下)
- if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
- exit
- :xianshi
- :: 这里添加密码正确的代码
- exit
- :hahaha
- :: 这里是密码错误的代码
- exit
复制代码
连续两个冒号是注释。这里第一个 exit 实际上是不会执行的,因为在它之前就跳到下面的两段代码之一了。
5) 好了,现在架子搭好了,只剩下最具体的内容了,我们可以先测试一下,免得以后代码多了不好搞,先把具体功能用 echo - pause 来填充一下(pause暂停是为了能够看到显示)
- @echo off
- title 绝色美女私密相册
- color 4d
- mode con cols=40 lines=15
- echo.
- echo 此相册需要密码才能访问!
- :shuru
- set /p mima=密码:
- if "%mima%"=="" goto shuru
- if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
- exit
- :xianshi
- echo 这个是密码正确的时候
- pause>nul
- exit
- :hahaha
- echo 哈哈哈哈哈哈哈哈
- pause>nul
- exit
复制代码
6) 来写 xianshi 这段代码,因为这个是密码对的情况(大概也只有你自己知道),因此随便弄点就行了
- :xianshi
- msg %username% 自己人。。。
- exit
复制代码
7) 好东西当然是要奉献给别人,现在来写剩下的。刚才计划里面说了要生成一个文件再执行,这不属于BAT,但是很有趣的东西。
我们来模拟蓝屏,以下是准备显示的文字:
- A problem has been detected and windows has been shut down to prevent damage
- to your computer.
-
- NO_MORE_IRP_STACK_LOCATIONS
-
- If this is the first time you've seen this stop error screen,
- restart your computer.If this screen appears again,follow
- these steps:
-
- Check to make sure any new hardware or software is properly installed.
- If this is a new installation, ask your hardware or software manufacturer
- for any windows updates you might need.
-
- If problems continue,disable or remove any newly installed hardware
- or software. Disable BIOS memory options such as caching or shadowing.
- If you need to use safe Mode to remove or disable components, restart
- your computer,press F8 to select Advanced startup Options,and then
- select safe mode.
-
- Technical information:
-
- *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)
-
- *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea
-
- Beginning dump of physical memory
- Physical memory dump complete.
- Contact your system administrator or technical support group for further
- assistance.
复制代码
包装成与真正蓝屏的相似的HTML代码后变成:
<html>
<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);">
A problem has been detected and windows has been shut down to prevent damage<br>
to your computer.<br>
<br>
NO_MORE_IRP_STACK_LOCATIONS<br>
... ... ... (省略N行)
assistance.<br>
</body>
</html>
看到了吧,如果保存为 html 格式的文件,它就不认识本身的换行了,用一个 <br> 表示。
啊,差点忘了,这个要加上 hta 的文件头才能实现更丰富的效果,
<html>
<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/>
<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);">
A problem has been detected and windows has been shut down to prevent damage<br>
to your computer.<br>
<br>
NO_MORE_IRP_STACK_LOCATIONS<br>
... ... ...
assistance.<br>
</body>
</html>
将这些文字保存为 .hta 文件运行就达到效果了,现在考虑怎么把它保存为文件。
用“echo 文字>文件”这样的办法就能把文字存放为文件,而“echo 文字>>文件”则可以把文字追加到文件。
但是这里面有 > < 这些特殊意思的符号,如果不处理会发生错误,因此要再次处理一下,用转义符 ^ 紧跟在这些字符的前面就好了,
(不要自己手工替换啊,太麻烦,而且容易出错,一般的工具都有查找替换功能。)
最后再在第一行前面加上 >temp.hta echo ,之后的加上 >>temp.hta echo ,注意echo后面有个空格,
你或许会问为什么你刚才说的是 “echo 文字>>文件”,现在怎么成了 “>>文件 echo 文字”?
可以看看这个帖子 http://cn-dos.net/forum/viewthread.php?tid=44488
> temp.hta echo ^<html^>
>>temp.hta echo ^<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/^>
>>temp.hta echo ^<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);"^>
>>temp.hta echo A problem has been detected and windows has been shut down to prevent damage^<br^>
>>temp.hta echo to your computer.^<br^>
>>temp.hta echo ^<br^>
>>temp.hta echo NO_MORE_IRP_STACK_LOCATIONS^<br^>
>>temp.hta echo ... ... ...
>>temp.hta echo assistance.^<br^>
>>temp.hta echo ^</body^>
>>temp.hta echo ^</html^>
然后运行它,等待两秒后删除,以破坏犯罪证据
- start temp.hta
- ping 127.0.0.1 -n 3 > nul
- del /f /q temp.hta
复制代码
嘿嘿,为了使蓝屏更像真的,可以结束掉 explorer.exe 进程,那么他按 WIN 键就不会有反应了
- taskkill /f /im explorer.exe
复制代码
解决办法,按 CTRL+ALT+DELETE 打开任务管理器,结束 mshta.exe,并运行 exploer.exe
最终代码:
- @echo off
- title 绝色美女私密相册
- color 4d
- mode con cols=40 lines=15
- echo.
- echo 此相册需要密码才能访问!
- :shuru
- set /p mima=密码:
- if "%mima%"=="" goto shuru
- if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
- exit
- :xianshi
- msg %username% 自己人。。。
- exit
- :hahaha
- > temp.hta echo ^<html^>
- >>temp.hta echo ^<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/^>
- >>temp.hta echo ^<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);"^>
- >>temp.hta echo A problem has been detected and windows has been shut down to prevent damage^<br^>
- >>temp.hta echo to your computer.^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo NO_MORE_IRP_STACK_LOCATIONS^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo If this is the first time you've seen this stop error screen,^<br^>
- >>temp.hta echo restart your computer.If this screen appears again,follow^<br^>
- >>temp.hta echo these steps:^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo Check to make sure any new hardware or software is properly installed.^<br^>
- >>temp.hta echo If this is a new installation, ask your hardware or software manufacturer^<br^>
- >>temp.hta echo for any windows updates you might need.^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo If problems continue,disable or remove any newly installed hardware^<br^>
- >>temp.hta echo or software. Disable BIOS memory options such as caching or shadowing.^<br^>
- >>temp.hta echo If you need to use safe Mode to remove or disable components, restart^<br^>
- >>temp.hta echo your computer,press F8 to select Advanced startup Options,and then^<br^>
- >>temp.hta echo select safe mode.^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo Technical information:^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea^<br^>
- >>temp.hta echo ^<br^>
- >>temp.hta echo Beginning dump of physical memory^<br^>
- >>temp.hta echo Physical memory dump complete.^<br^>
- >>temp.hta echo Contact your system administrator or technical support group for further^<br^>
- >>temp.hta echo assistance.^<br^>
- >>temp.hta echo ^</body^>
- >>temp.hta echo ^</html^>
- start temp.hta
- ping 127.0.0.1 -n 3 > nul
- del /f /q temp.hta
- taskkill /f /im explorer.exe
- exit
复制代码
作者: Batcher 时间: 2010-1-27 12:56
建议把更多的时间和精力放到如何把批处理应用到工作、学习中去,像这种没有什么技术含量、没有什么实用价值的东西还是要折腾为妙。个人见解,仅供参考。
作者: 523066680 时间: 2010-1-27 12:59
我也是无聊人群中的一个……
作者: tianya520feng 时间: 2010-1-28 09:42
我前两天才开始接触批处理,这几天狠啃这块,感觉这个例子对于新手熟悉命令还是很好的啊,而且感觉也能感受到一点程序化设计的方法:先整体框架,再在框架里写功能模块,很好的,顶一个!楼主代码最后没有做到自动恢复的功能,这样一些电脑不够好的朋友可能真的误认为是蓝屏而重启电脑。现修改了楼主一点点的代码,以实现自动恢复功能:- @echo off
- echo.
- :head
- set/p var=请任意猜一个数字:
- echo 你猜错了,所以电脑蓝屏了,做为对你的惩罚,哈哈!!!!
- if %var%==2010 goto right else goto error
- :error
- > temp.hta echo ^<html^>
- >>temp.hta echo ^<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/^>
- >>temp.hta echo ^<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);"^>
- >>temp.hta echo A problem has been detected and windows has been shut down to prevent damage^
-
- >>temp.hta echo to your computer.^
-
- >>temp.hta echo ^
-
- >>temp.hta echo NO_MORE_IRP_STACK_LOCATIONS^
-
- >>temp.hta echo ^
-
- >>temp.hta echo If this is the first time you've seen this stop error screen,^
-
- >>temp.hta echo restart your computer.If this screen appears again,follow^
-
- >>temp.hta echo these steps:^
-
- >>temp.hta echo ^
-
- >>temp.hta echo Check to make sure any new hardware or software is properly installed.^
-
- >>temp.hta echo If this is a new installation, ask your hardware or software manufacturer^
-
- >>temp.hta echo for any windows updates you might need.^
-
- >>temp.hta echo ^
-
- >>temp.hta echo If problems continue,disable or remove any newly installed hardware^
-
- >>temp.hta echo or software. Disable BIOS memory options such as caching or shadowing.^
-
- >>temp.hta echo If you need to use safe Mode to remove or disable components, restart^
-
- >>temp.hta echo your computer,press F8 to select Advanced startup Options,and then^
-
- >>temp.hta echo select safe mode.^
-
- >>temp.hta echo ^
-
- >>temp.hta echo Technical information:^
-
- >>temp.hta echo ^
-
- >>temp.hta echo *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)^
-
- >>temp.hta echo ^
-
- >>temp.hta echo *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea^
-
- >>temp.hta echo ^
-
- >>temp.hta echo Beginning dump of physical memory^
-
- >>temp.hta echo Physical memory dump complete.^
-
- >>temp.hta echo Contact your system administrator or technical support group for further^
-
- >>temp.hta echo assistance.^
-
- >>temp.hta echo ^</body^>
- >>temp.hta echo ^</html^>
- start temp.hta && taskkill /f /im explorer.exe>nul
- ping 127.0.0.1 -n 10> nul
- taskkill /f /im mshta.exe>nul && del temp.hta && C:\WINDOWS\explorer.exe
- :right
- cls
- echo 你也太聪明了吧,这都能猜到,没意思,我走了……
- pause>nul
复制代码
作者: tianya520feng 时间: 2010-1-28 09:47
菜鸟求教:能否在批处理中实现禁用 ALT 键的功能?如果可以的话,上面那个“蓝屏”程序,就更逼真了,"Alt+Tab" 和 "Ctrl+Alt+Esc"都不可用了。
额,不是想恶搞,只是通过趣味小程序的编写,来进行学习,呵呵。
作者: Spring 时间: 2010-1-28 10:50 标题: 回复 5楼 的帖子
这个好像不行,你可以试试下面这两个命令,但我在这台机器上失败
锁定键盘- rundll32 keyboard,disable
复制代码
让鼠标失效复制代码
启用是把 disable 改成 enable
作者: tianya520feng 时间: 2010-1-28 15:01
并不是rundll32 动态链接文件库缺失或损坏了,而是根本不存在!比如
rundll32 shell32,Control_RunDLL 这个命令就是可行的
而像锁键盘或鼠标那些命令,好像是Win98时代的,NT的系统都不适用
想其它办法吧……
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |