[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理实例现场制作,演示一些常用的操作

今天来现场制作一个恶搞程序。。。
练习的知识点:
1. 在批处理中使用输入并保存为变量
2. 对两个值进行判断
3. 模块化地编写代码,以便修改和阅读
4. 创建文件,并在使用后删除
5. 了解一些其他知识

程序的过程是这样的:
首先名字要取得由吸引力,诱使别人来运行,比如“如花的私密自拍.bat”;
运行之后是显示一些文字,让别人输入;
把输入的东西存到变量,然后判断,根据不同的值进行不同的操作。
==========================
好了,开工!

1)  在一个地方,就桌面吧,新建一个文本文档,重命名为 “如花的私密自拍.bat”(不含引号)。
2)  右键“编辑”,开始写代码啦。作为批处理,我们一般都会屏蔽我们输入的命令的显示,因此先加这个再说
  1. @echo off
复制代码

为了美观,我们再设置一下界面的颜色大小标题什么的,注意如果设置了高度(lines),那么CMD界面就没有滚动条了
  1. title 绝色美女私密相册
  2. color 4d
  3. mode con cols=40 lines=15
复制代码

3)  准备工作弄好了,可以开始写主体了,首先我们必须得到一个输入值,然后才能进行判断,我们把输入的值放入一个叫 mima 的变量里面,变量可以理解为杯子,可以装水,也可以倒掉装酒,它里面的数据是可以随时改变的。
这个功能一行就能搞定,而且可以附带显示一行提示信息,但是如果超过一行,就要自己用 echo 先显示一下了,用 echo. 可以输出一个空行
  1. echo.
  2. echo 此相册需要密码才能访问!
  3. set /p mima=密码:
复制代码

等等,如果别人直接按了回车怎么办呢,得到的是空的值!所以我们可以加一个判断。
在 set 的上一行设置一个标记,叫 shuru 吧(标记的格式是在一行的第一个字符是冒号,后面紧跟这个标记),然后在 set 下一行进行一个判断,看看 mima 是不是空的,如果是空的话就用 goto 回到 shuru 重新让他输入,直到不为空再放行,于是变成这样
  1. echo.
  2. echo 此相册需要密码才能访问!
  3. :shuru
  4. set /p mima=密码:
  5. if "%mima%"=="" goto shuru
复制代码

%mima%是什么东西?它就是变量 mima 中存放的值。
4)  好了,现在已经有一个输入值了,可以判断了,现在我们把密码设置成 sb250 ,就是说只有完全符合这个,我们才会进行对的操作,否则的话就不管他跟谁一样了,都执行错的操作,而且操作之后我们的主流程就结束了,因此在判断之后来一个 exit 退出程序。
if "%mima%"=="sb250" (做对的事) else (吓唬他一下)
  1. if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
  2. exit
  3. :xianshi
  4. :: 这里添加密码正确的代码
  5. exit
  6. :hahaha
  7. :: 这里是密码错误的代码
  8. exit
复制代码

连续两个冒号是注释。这里第一个 exit 实际上是不会执行的,因为在它之前就跳到下面的两段代码之一了。
5)  好了,现在架子搭好了,只剩下最具体的内容了,我们可以先测试一下,免得以后代码多了不好搞,先把具体功能用 echo - pause 来填充一下(pause暂停是为了能够看到显示)
  1. @echo off
  2. title 绝色美女私密相册
  3. color 4d
  4. mode con cols=40 lines=15
  5. echo.
  6. echo 此相册需要密码才能访问!
  7. :shuru
  8. set /p mima=密码:
  9. if "%mima%"=="" goto shuru
  10. if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
  11. exit
  12. :xianshi
  13. echo 这个是密码正确的时候
  14. pause>nul
  15. exit
  16. :hahaha
  17. echo 哈哈哈哈哈哈哈哈
  18. pause>nul
  19. exit
复制代码

6)  来写 xianshi 这段代码,因为这个是密码对的情况(大概也只有你自己知道),因此随便弄点就行了
  1. :xianshi
  2. msg %username% 自己人。。。
  3. exit
复制代码

7)  好东西当然是要奉献给别人,现在来写剩下的。刚才计划里面说了要生成一个文件再执行,这不属于BAT,但是很有趣的东西。
我们来模拟蓝屏,以下是准备显示的文字:
  1. A problem has been detected and windows has been shut down to prevent damage
  2. to your computer.
  3. NO_MORE_IRP_STACK_LOCATIONS
  4. If this is the first time you've seen this stop error screen,
  5. restart your computer.If this screen appears again,follow
  6. these steps:
  7. Check to make sure any new hardware or software is properly installed.
  8. If this is a new installation, ask your hardware or software manufacturer
  9. for any windows updates you might need.
  10. If problems continue,disable or remove any newly installed hardware
  11. or software. Disable BIOS memory options such as caching or shadowing.
  12. If you need to use safe Mode to remove or disable components, restart
  13. your computer,press F8 to select Advanced startup Options,and then
  14. select safe mode.
  15. Technical information:
  16. *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)
  17. *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea
  18. Beginning dump of physical memory
  19. Physical memory dump complete.
  20. Contact your system administrator or technical support group for further
  21. 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^>
然后运行它,等待两秒后删除,以破坏犯罪证据
  1. start temp.hta
  2. ping 127.0.0.1 -n 3 > nul
  3. del /f /q temp.hta
复制代码

嘿嘿,为了使蓝屏更像真的,可以结束掉 explorer.exe 进程,那么他按 WIN 键就不会有反应了
  1. taskkill /f /im explorer.exe
复制代码

解决办法,按 CTRL+ALT+DELETE 打开任务管理器,结束 mshta.exe,并运行 exploer.exe
最终代码:
  1. @echo off
  2. title 绝色美女私密相册
  3. color 4d
  4. mode con cols=40 lines=15
  5. echo.
  6. echo 此相册需要密码才能访问!
  7. :shuru
  8. set /p mima=密码:
  9. if "%mima%"=="" goto shuru
  10. if "%mima%"=="sb250" (goto xianshi) else (goto hahaha)
  11. exit
  12. :xianshi
  13. msg %username% 自己人。。。
  14. exit
  15. :hahaha
  16. > temp.hta echo ^<html^>
  17. >>temp.hta echo     ^<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/^>
  18. >>temp.hta echo     ^<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);"^>
  19. >>temp.hta echo  A problem has been detected and windows has been shut down to prevent damage^<br^>
  20. >>temp.hta echo  to your computer.^<br^>
  21. >>temp.hta echo  ^<br^>
  22. >>temp.hta echo  NO_MORE_IRP_STACK_LOCATIONS^<br^>
  23. >>temp.hta echo  ^<br^>
  24. >>temp.hta echo  If this is the first time you've seen this stop error screen,^<br^>
  25. >>temp.hta echo  restart your computer.If this screen appears again,follow^<br^>
  26. >>temp.hta echo  these steps:^<br^>
  27. >>temp.hta echo  ^<br^>
  28. >>temp.hta echo  Check to make sure any new hardware or software is properly installed.^<br^>
  29. >>temp.hta echo  If this is a new installation, ask your hardware or software manufacturer^<br^>
  30. >>temp.hta echo  for any windows updates you might need.^<br^>
  31. >>temp.hta echo  ^<br^>
  32. >>temp.hta echo  If problems continue,disable or remove any newly installed hardware^<br^>
  33. >>temp.hta echo  or software. Disable BIOS memory options such as caching or shadowing.^<br^>
  34. >>temp.hta echo  If you need to use safe Mode to remove or disable components, restart^<br^>
  35. >>temp.hta echo  your computer,press F8 to select Advanced startup Options,and then^<br^>
  36. >>temp.hta echo  select safe mode.^<br^>
  37. >>temp.hta echo  ^<br^>
  38. >>temp.hta echo  Technical information:^<br^>
  39. >>temp.hta echo  ^<br^>
  40. >>temp.hta echo  *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)^<br^>
  41. >>temp.hta echo  ^<br^>
  42. >>temp.hta echo  *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea^<br^>
  43. >>temp.hta echo  ^<br^>
  44. >>temp.hta echo  Beginning dump of physical memory^<br^>
  45. >>temp.hta echo  Physical memory dump complete.^<br^>
  46. >>temp.hta echo  Contact your system administrator or technical support group for further^<br^>
  47. >>temp.hta echo  assistance.^<br^>
  48. >>temp.hta echo     ^</body^>
  49. >>temp.hta echo ^</html^>
  50. start temp.hta
  51. ping 127.0.0.1 -n 3 > nul
  52. del /f /q temp.hta
  53. taskkill /f /im explorer.exe
  54. exit
复制代码

建议把更多的时间和精力放到如何把批处理应用到工作、学习中去,像这种没有什么技术含量、没有什么实用价值的东西还是要折腾为妙。个人见解,仅供参考。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

我也是无聊人群中的一个……

TOP

我前两天才开始接触批处理,这几天狠啃这块,感觉这个例子对于新手熟悉命令还是很好的啊,而且感觉也能感受到一点程序化设计的方法:先整体框架,再在框架里写功能模块,很好的,顶一个!楼主代码最后没有做到自动恢复的功能,这样一些电脑不够好的朋友可能真的误认为是蓝屏而重启电脑。现修改了楼主一点点的代码,以实现自动恢复功能:
  1. @echo off
  2. echo.
  3. :head
  4. set/p var=请任意猜一个数字:
  5. echo 你猜错了,所以电脑蓝屏了,做为对你的惩罚,哈哈!!!!
  6. if %var%==2010 goto right else goto error
  7. :error
  8. > temp.hta echo ^<html^>
  9. >>temp.hta echo     ^<HTA:APPLICATION Application BORDER="None" WINDOWSTATE="Maximize" SCROLL="No" INNERBORDER="No" SELECTION="No"/^>
  10. >>temp.hta echo     ^<body style="background-color:#00D;color:#EEE;font-family:consolas;font-size:12pt;font-weight:lighter;cursor:url(fuck);"^>
  11. >>temp.hta echo  A problem has been detected and windows has been shut down to prevent damage^
  12. >>temp.hta echo  to your computer.^
  13. >>temp.hta echo  ^
  14. >>temp.hta echo  NO_MORE_IRP_STACK_LOCATIONS^
  15. >>temp.hta echo  ^
  16. >>temp.hta echo  If this is the first time you've seen this stop error screen,^
  17. >>temp.hta echo  restart your computer.If this screen appears again,follow^
  18. >>temp.hta echo  these steps:^
  19. >>temp.hta echo  ^
  20. >>temp.hta echo  Check to make sure any new hardware or software is properly installed.^
  21. >>temp.hta echo  If this is a new installation, ask your hardware or software manufacturer^
  22. >>temp.hta echo  for any windows updates you might need.^
  23. >>temp.hta echo  ^
  24. >>temp.hta echo  If problems continue,disable or remove any newly installed hardware^
  25. >>temp.hta echo  or software. Disable BIOS memory options such as caching or shadowing.^
  26. >>temp.hta echo  If you need to use safe Mode to remove or disable components, restart^
  27. >>temp.hta echo  your computer,press F8 to select Advanced startup Options,and then^
  28. >>temp.hta echo  select safe mode.^
  29. >>temp.hta echo  ^
  30. >>temp.hta echo  Technical information:^
  31. >>temp.hta echo  ^
  32. >>temp.hta echo  *** STOP: 0x00000024 (0x001902FE,0xF7A4F660,0xF7A4F35C,0xF73CB7B6)^
  33. >>temp.hta echo  ^
  34. >>temp.hta echo  *** ntfs.sys - address F73CB7B6 base at F73CB000, Datestamp 41107eea^
  35. >>temp.hta echo  ^
  36. >>temp.hta echo  Beginning dump of physical memory^
  37. >>temp.hta echo  Physical memory dump complete.^
  38. >>temp.hta echo  Contact your system administrator or technical support group for further^
  39. >>temp.hta echo  assistance.^
  40. >>temp.hta echo     ^</body^>
  41. >>temp.hta echo ^</html^>
  42. start temp.hta && taskkill /f /im explorer.exe>nul
  43. ping 127.0.0.1 -n 10> nul
  44. taskkill /f /im  mshta.exe>nul  && del temp.hta  && C:\WINDOWS\explorer.exe
  45. :right
  46. cls
  47. echo 你也太聪明了吧,这都能猜到,没意思,我走了……
  48. pause>nul
复制代码

TOP

菜鸟求教:能否在批处理中实现禁用 ALT 键的功能?如果可以的话,上面那个“蓝屏”程序,就更逼真了,"Alt+Tab" 和 "Ctrl+Alt+Esc"都不可用了。
额,不是想恶搞,只是通过趣味小程序的编写,来进行学习,呵呵。

TOP

回复 5楼 的帖子

这个好像不行,你可以试试下面这两个命令,但我在这台机器上失败

锁定键盘
  1. rundll32 keyboard,disable
复制代码
让鼠标失效
  1. rundll32 mouse,disable
复制代码
启用是把 disable 改成 enable

TOP

并不是rundll32 动态链接文件库缺失或损坏了,而是根本不存在!比如
rundll32  shell32,Control_RunDLL 这个命令就是可行的
而像锁键盘或鼠标那些命令,好像是Win98时代的,NT的系统都不适用
想其它办法吧……

TOP

返回列表