Board logo

标题: [其他] 批处理智能代码生成 [打印本页]

作者: cjiabing    时间: 2012-3-19 02:01     标题: 批处理智能代码生成

喜欢原创,继续原创!
打算做一个“输入中文生成批处理代码”的东西,尝试了下,觉得可行。
下面是一个初步的尝试,需要进行二级判断才行,明天有空了再试。
  1. @echo off
  2. set title=批处理智能代码生成 V1.0
  3. :menu
  4. cls
  5. for /f "tokens=*" %%a in ('
  6. title;%title%
  7. ::by cjiabing;from bathome;date 2012-3-19
  8. ^&echo. ^&echo. ^&echo. ^&echo.%title%^&echo. ^&echo. ^&echo.
  9. 尝试一种智能:通过输入描述性词语来达到自动编程的效果。
  10. ^&echo;
  11. 按照批处理规则输入描述词语(中文),以空格分隔关键词。
  12. ^&echo;
  13. 比如:显示 我爱你 并 输入 123.txt
  14. ^&echo;
  15. 等于:echo 我爱你 ^^^& echo 我爱你^^^>^^^>123.txt
  16. ') do echo;    %%a
  17. echo;
  18. set input=
  19. set /p input=    请输入:
  20. if "%input%"=="" goto menu
  21. for /f "tokens=1-3*" %%a in ("%input%") do (
  22.     echo;    输入的是:%%a %%b %%c %%d %%e&echo;
  23.     if /i %%a==显示 echo;%%b
  24.     if /i %%a==写入 echo;%%b>>%%c
  25.     if /i %%a==清屏 goto menu
  26.     if /i %%a==返回 goto menu
  27.     if /i %%a==关闭回显 @echo off
  28.     if /i %%a==打开回显 @echo on
  29.     if /i %%a==设置变量延迟 setlocal enabledelayedexpansion
  30.     if /i %%a==关闭变量延迟 endlocal
  31.     if /i %%a==设置 set %%b=%%c
  32.     if /i %%a==输入 set /p %%b=%%c
  33.     if /i %%a==运算 set /a %%b=%%c
  34.     if /i %%a==如果存在 if exist %%b %%c
  35.     if /i %%a==如果不存在 if not exist %%b %%c
  36.     if /i %%a==如果有值 if defined %%b %%c
  37.     if /i %%a==如果没有值 if not defined %%b %%c
  38.     if /i %%a==如果是空值 if "%%b"=="" %%c
  39.     if /i %%a==如果不是空值 if not "%%b"=="" %%c
  40.     if /i %%a==如果 if "%%b"=="%%c" %%d
  41.     if /i %%a==如果不 if not "%%b"==""  %%c
  42. )
  43. pause>nul
  44. goto menu
复制代码

作者: find    时间: 2012-3-19 09:01

是不是跟易语言编程有点神似
作者: cjiabing    时间: 2012-3-19 11:53

回复 2# find


    可以表情?   
    当时我只是想输入汉字让它自动生成命令,免得输入英文罗罗索索的,后来想想,这个跟易语言真的有点神似,嘿嘿!~
作者: cpp    时间: 2012-3-19 15:29

回复 3# cjiabing


    发现就在批处理上就是个神人,厉害
作者: cjiabing    时间: 2012-3-19 17:41

555,不大好弄,处理IF的参数让人头疼!~
我想到一个新的挑战,看挑战区。
作者: hlzj88    时间: 2012-6-10 02:40

这个想法很好,如果能像菜单一样来选择就好,譬如我们来 for   选择是for一个文件还是for一个文件夹下的类型文件,这样生产的代码,大致是不会错的,需要对细节修改就可以使用了。
作者: 狱渊    时间: 2013-4-29 15:55

好厉害  你们  我还是新人啊
作者: cjiabing    时间: 2013-4-29 21:41

回复 7# 狱渊


    我经常写些半吊子的东西,时间和精力有限啊,大家相互学习!~
作者: 狱渊    时间: 2014-1-17 18:45

没法比 我过了好久还是个小白。。。
作者: binghejin    时间: 2014-1-20 19:57

支持,顶一个!
作者: ads350668398    时间: 2014-10-24 07:26

回复 1# cjiabing

重点应该放在智能一块吧
作者: dengyuli    时间: 2014-11-1 13:21

本帖最后由 dengyuli 于 2014-11-23 13:51 编辑

可以通过替换特定字符串来实现智能化。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims= tokens=* eol=?" %%a in (%~1) do (
  4. set b=%%a
  5. set c=!b:关闭回显=@echo off! & set b=!c!
  6. set c=!b:修改背景颜色=color! & set b=!c!
  7. set c=!b:暂停=pause! & set b=!c!
  8. set c=!b:如果=if ! & set b=!c!
  9. set c=!b:执行结果不显示在屏幕上=^>nul! & set b=!c!
  10. set c=!b:执行结果不显示到屏幕上=^>nul! & set b=!c!
  11. set c=!b:即使出现错误也不显示=^2^>nul! & set b=!c!
  12. set c=!b:显示=echo ! & set b=!c!
  13. set c=!b: 不 =not ! & set b=!c!
  14. set c=!b:存在=exist ! & set b=!c!
  15. set c=!b:大于等于= geq ! & set b=!c!
  16. set c=!b:小于等于= leq ! & set b=!c!
  17. set c=!b:不等于= neq ! & set b=!c!
  18. set c=!b:大于= gtr ! & set b=!c!
  19. set c=!b:小于= lss ! & set b=!c!
  20. set c=!b:等于===! & set b=!c!
  21. set c=!b:的话= (! & set b=!c!
  22. set c=!b:判断结束=^)! & set b=!c!
  23. set c=!b:否则=^) else ^(! & set b=!c!
  24. set c=!b:赋值=set! & set b=!c!
  25. set c=!b:交互模式=/p! & set b=!c!
  26. set c=!b:计算=/a! & set b=!c!
  27. set c=!b: 其表达式为:==! & set b=!c!
  28. set c=!b:累加=+=! & set b=!c!
  29. set c=!b:##=%%! & set b=!c!
  30. set c=!b:循环结束=^)! & set b=!c!
  31. set c=!b:循环,=for ! & set b=!c!
  32. set c=!b:文本解析=/f! & set b=!c!
  33. set c=!b:遍历目录=/r! & set b=!c!
  34. set c=!b:计数循环=/l! & set b=!c!
  35. set c=!b:分隔符为:=delims=! & set b=!c!
  36. set c=!b:取用的节:=tokens=! & set b=!c!
  37. set c=!b:忽略以此字符打头的行:=eol=! & set b=!c!
  38. set c=!b:从此行的下一行开始处理:=skip=! & set b=!c!
  39. set c=!b:要读取的文档为:=in ! & set b=!c!
  40. set c=!b:定义局部变量为=%%%%! & set b=!c!
  41. set c=!b:执行以下命令:=do (! & set b=!c!
  42. set c=!b:初始值:=! & set b=!c!
  43. set c=!b:步长:=! & set b=!c!
  44. set c=!b:终止值:=! & set b=!c!
  45. set c=!b:标签 =:! & set b=!c!
  46. set c=!b:跳转至=goto :! & set b=!c!
  47. set c=!b:程序尾部=eof! & set b=!c!
  48. set c=!b:调用=call ! & set b=!c!
  49. set c=!b:输出到文件并覆盖=>! & set b=!c!
  50. set c=!b:输出到文件并追加=>>! & set b=!c!
  51. set c=!b:刷新屏幕=cls! & set b=!c!
  52. set c=!b:的使用方法= /?! & set b=!c!
  53. set c=!b:颜色设置=color! & set b=!c!
  54. set c=!b:黑色=0! & set b=!c!
  55. set c=!b:蓝色=1! & set b=!c!
  56. set c=!b:浅绿色=a! & set b=!c!
  57. set c=!b:绿色=2! & set b=!c!
  58. set c=!b:红色=4! & set b=!c!
  59. set c=!b:紫色=5! & set b=!c!
  60. set c=!b:黄色=6! & set b=!c!
  61. set c=!b:白色=7! & set b=!c!
  62. set c=!b:亮白色=f! & set b=!c!
  63. set c=!b:设置窗口大小=mode con! & set b=!c!
  64. set c=!b:窗口高度为:=lines=! & set b=!c!
  65. set c=!b:窗口宽度为:=cols=! & set b=!c!
  66. set c=!b:标题:=title ! & set b=!c!
  67. set c=!b:注释:=rem ! & set b=!c!
  68. set c=!b:提示是否删除=/p! & set b=!c!
  69. set c=!b:强制删除=/f! & set b=!c!
  70. set c=!b:删除 =del ! & set b=!c!
  71. set c=!b:包括其子文件夹下的所有指定文件=/s! & set b=!c!
  72. set c=!b:安静模式=/q! & set b=!c!
  73. set c=!b:要删除的文件的属性:=/a:! & set b=!c!
  74. set c=!b:只读文件=R! & set b=!c!
  75. set c=!b:隐藏文件=H! & set b=!c!
  76. set c=!b:无内容索引文件=I! & set b=!c!
  77. set c=!b:非=-! & set b=!c!
  78. set c=!b:系统文件=S! & set b=!c!
  79. set c=!b:存档文件=A! & set b=!c!
  80. set c=!b:创建目录:=md ! & set b=!c!
  81. set c=!b:不提示覆盖已存在的文件=/y! & set b=!c!
  82. set c=!b:复制文件=copy ! & set b=!c!
  83. set c=!b:到= ! & set b=!c!
  84. set c=!b:删除目录=rd ! & set b=!c!
  85. set c=!b:及其子文件夹= /s! & set b=!c!
  86. for /l %%a in (1,1,100) do (
  87.   if "!c:~-1!"==" " (
  88.    set c=!b:~0,-1!
  89.    set b=!c!
  90.   ) else (
  91.    break
  92.   )
  93. )
  94. echo ^!c!>>a.bat
  95. )>nul 2>nul
  96. call a.bat
  97. del /f /q a.bat >nul 2>nul
复制代码

作者: dengyuli    时间: 2014-11-1 13:24

中文脚本举例:
  1. 刷新屏幕
  2. 关闭回显
  3. 设置窗口大小 窗口高度为:15 窗口宽度为:60
  4. 标题:汉化批处理脚本
  5. 颜色设置 黑色浅绿色
  6. 循环,文本解析 "分隔符为: 取用的节:* 忽略以此字符打头的行:?" 定义局部变量为a 要读取的文档为:(test.txt) 执行以下命令:
  7. 显示%%a
  8. 循环结束
  9. 暂停 执行结果不显示在屏幕上
复制代码
将中文脚本拖到12楼的批处理上
作者: amwfjhh    时间: 2014-11-3 14:25

本帖最后由 amwfjhh 于 2014-11-3 14:28 编辑

楼主这个思路很新颖啊,以中文作为转换参数调用批处理,相当于你自己写一个基于批处理的平台,弄完工程量大……
顺带吐槽,居然新手不能发贴,到上尉得到哪年月了……
作者: Batcher    时间: 2014-11-3 21:56

回复 14# amwfjhh


可以到这个版块发帖:
http://bbs.bathome.net/forum-5-1.html
作者: amwfjhh    时间: 2014-11-5 16:30

回复 15# Batcher
管理员居然回复了,有点受宠若惊,只是吐槽一下,想把自己学习过程中写的一些小玩艺发上来玩玩,发到求助区有点文不对题,这两天看了一下论坛的贴子,然后就不好意思发了。发出来在老鸟眼中肯定是问题连连,极度不爽,不要否认,专注技术的人或多或少都有些强迫症滴……
作者: Batcher    时间: 2014-11-5 18:15

回复 16# amwfjhh


    可以发出来让大家帮你改进
作者: cjiabing    时间: 2014-11-7 19:29

回复 12# dengyuli


    有心情你继续鼓捣啊,不错!~
我实证抽不出时间和耐心了,老咯!~
作者: dengyuli    时间: 2014-11-23 13:51

本帖最后由 dengyuli 于 2014-11-23 13:52 编辑

代码已在12楼更新,生成的脚本不再会有多余的空格,节省空间,另外又添加了几个命令。
作者: MCRGZN    时间: 2015-8-13 23:10

不错不错不错不错不错




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2