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

[特效代码] 彩色rainbow批处理,能通过按f5来激活和禁止,怎样优化效率?

首先谢谢defanive给我带来了启发~ 终于有一种既不用临时文件,也不会造成文件越来越大个,但可以让2个cmd进程对话的方法~
就是用对文件影响最小的方法:attrib +r
因为每次一换文件的属性,%~a0的变量就会改变~
这是我彩色rainbow批处理的代码,需要ckey,可以通过按f5来激活/禁止效果
  1. @echo off
  2. attrib -r -s -h "%~0"
  3. if "%1"=="color" goto c
  4. start /b "" "%~0" color
  5. echo.
  6. echo Rainbow效果批处理
  7. echo.
  8. echo 按下F5来启用/禁止rainbow效果
  9. :b
  10. ckey 116
  11. attrib +r "%~0"
  12. goto b
  13. :c
  14. set attr=%~a0
  15. color 0f
  16. :cc
  17. if "%~a0"=="%attr%" (sleep 100&goto cc) else (
  18. attrib -r "%~0")
  19. :d
  20. set attr=%~a0
  21. :dd
  22. for %%i in (07 09 0a 0b 0c 0d 0e 0f) do (
  23. if not "%~a0"=="%attr%" (
  24. attrib -r "%~0"
  25. goto c)
  26. color %%i
  27. sleep 100
  28. )
  29. goto dd
复制代码
现在唯一的问题,就是效率有待提高。欢迎大家来帮忙优化一下~
为何批处理不适合做界面
为何随风讨厌call命令
http://bbs.bathome.net/thread-4482-1-10.html

我的天,帖子就这样沉了?还有管理员来改我的标题了?
为何批处理不适合做界面
为何随风讨厌call命令
http://bbs.bathome.net/thread-4482-1-10.html

TOP

又修改了一些东西

又修改了一些东西,减少if命令,使其更省cpu
  1. @echo off
  2. title Rainbow效果批处理
  3. attrib -r -s -h "%~0"
  4. if "%~1"=="color" goto d
  5. set pressed=0
  6. echo.
  7. echo Rainbow效果批处理
  8. echo.
  9. echo 按下F5来启用/禁止rainbow效果
  10. :b
  11. ckey 116
  12. if "%pressed%"=="0" (set pressed=1&start /b "" "%~0" color) else (attrib +r "%~0"&set pressed=0)
  13. goto b
  14. :d
  15. set attr=%~a0
  16. :dd
  17. for %%i in (07 09 0a 0b 0c 0d 0e 0f) do (
  18. if not "%~a0"=="%attr%" (
  19. attrib -r "%~0"
  20. color 0f
  21. exit)
  22. color %%i
  23. sleep 100
  24. )
  25. goto dd
复制代码
为何批处理不适合做界面
为何随风讨厌call命令
http://bbs.bathome.net/thread-4482-1-10.html

TOP

  1. @echo off
  2. if "%~1"=="" (start /b "" "%~f0" 123) else (goto :loop2)
  3. setlocal enabledelayedexpansion
  4. attrib -r "%~f0"
  5. set "fz=%~a0"
  6. set "mode=0"
  7. set "forecolor=79abcdef"
  8. echo Rainbow效果批处理
  9. :loop1
  10. if "%mode%"=="0" (set /a "i=(i+1)%%8"&color 0!forecolor:~%i%,1!) else (color 07)
  11. if not "%fz%"=="%~a0" attrib -r "%~f0"&set /a mode=1-mode
  12. goto :loop1
  13. :loop2
  14. pause>nul
  15. attrib +r "%~f0"
  16. goto :loop2
复制代码
感觉效率上没什么区别
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

本帖最后由 raymai97 于 2011-8-20 15:56 编辑

回复 4# defanive


区别:
    1. 你的没有使用sleep.com,但由于没有延迟,结果在cpu占用比我的还要高,我使用sleep是因为sleep几乎不占cpu,而且可以减少cpu占用率,及防止cmd闪得太快的问题
    2. 我第二个写的采用新的方式,效率并没有提高,但起码更省cpu,因为从一直if到按了f5才if~
    3. 你的不能通过f5来激活和禁止~
为何批处理不适合做界面
为何随风讨厌call命令
http://bbs.bathome.net/thread-4482-1-10.html

TOP

回复 5# raymai97


    直接按键就可以了,小程序何必背一个ckey,加上延迟之后效果都差不多
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

返回列表