[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 defanive 于 2009-2-1 20:46 发表
这个难度太高了。。。

我之前也有段时间在想一个新的批处理解释器(就是cmd类似的东东),这个解释器能自动把鼠标、键盘等信息返回到批处理变量里面,还运行批处理删除、增加、禁止右键菜单等。。。

结果后来解 ...

system尽量不要用,有系统API摆着呢
话说我可以用P处理做个红黑树链表用于快速查找数据...哈哈...

TOP

做了个普通的Array..还没改成专用的形式嘿嘿,好心人帮助下咯
也没提供特殊字符&输入错误处理
提供以下函数:
CreateArray 创建一个数组,注意:从_1开始
GetLength  获取数组长度
SetAt   设置特定位置元素
GetAt   获取特定位置元素
MapArray   对整个(或指定多个位置)数组执行相同操作
EchoArray   以指定方式输出整个元素
InsertAt     在指定位置后插入一个元素
InsertArray  在指定位置后插入一个以CreateArray创建的数组
RemoveArray   删除指定位置后指定个元素
RemoveAll   清空数组
IsEmpty    若数组(不)为空,执行指定操作
PushArray   在数组末尾增加一个元素
PopArray    弹出数组末尾的一个元素
ReadArray   从文件(或控制台输入)读取数组元素
FindArray   在数组里查找其中一个指定元素
  1. CreateArray <name> <size> <defaultvalue>
  2. example:
  3.      call :CreateArray array 10 %%%%i
  4. GetLength  <name> <result>
  5. example:
  6.      call :GetLength array length
  7. SetAt   <name> <index> <value>
  8. example:
  9.      call :SetAt array 6 我是第六个元素
  10. GetAt   <name> <index> <result>
  11. example:
  12.      call :GetAt array 6 value
  13. MapArray   <name> <index> <flag>
  14. example:
  15.      call :MapArray array "1 2 4 6" "set/a$item$+=$index[code]CreateArray <name> <size> <defaultvalue>
  16. example:
  17.      call :CreateArray array 10 %%%%i
  18. GetLength  <name> <result>
  19. example:
  20.      call :GetLength array length
  21. SetAt   <name> <index> <value>
  22. example:
  23.      call :SetAt array 6 我是第六个元素
  24. GetAt   <name> <index> <result>
  25. example:
  26.      call :GetAt array 6 value
  27. MapArray   <name> <index> <flag>
  28. example:
  29.      call :MapArray array "1 2 4 6" "set/a$item$+=$index$&quot;
  30.      rem   以上代码将array中第1个数据加1,第2个数据加2,第4个数据加4,第6个数据加6
  31.      call :MapArray array All "fsutil file createnew $value$.txt"
  32. EchoArray   <name> <flag>
  33. example:
  34.      call :EchoArray array "第$index$个元素是$value$&quot;
  35. InsertAt   <name> <index> <value>
  36. example:
  37.      call :InsertAt array 0 我是第一个元素咯
  38. InsertArray  <name> <index> <array>
  39. example:
  40.      call :CreateArray array 10 %%%%i
  41.      call :CreateArray array2 4 新%%%%i
  42.      call :InsertArray array 3 array2
  43. RemoveArray   <name> <index> <count>
  44. example:
  45.      call :RemoveArray array 3 2
  46.      rem 以上代码删去第4,5个元素
  47. RemoveAll  <name>
  48. example:
  49.      call :RemoveAll array
  50. IsEmpty    <name> <flag> {not}
  51. example:
  52.      call :IsEmpty array 空了空了
  53.   call :IsEmpty array 里面还有东西呢 not
  54. PushArray   <name> <value>
  55. example:
  56.      call :PushArray array 我是新人
  57. PopArray    <name> <result>
  58. example:
  59.      call :PopArray array Result
  60. ReadArray   <name> <file>|<"" <tip> <endflag>>
  61. example:
  62.      call :ReadArray array input.txt
  63.      call :ReadArray array "" Input: " "
  64.      rem endflag即结束标志...以上代码表示输入的是空格时结束
  65. FindArray   <name> <result> <findindex> <findstring>
  66. example:
  67.      call :FindArray array result 2 找我啊
  68.   rem 以上代码查找array数组中第二个"找我啊",没找到返回$NULL$
复制代码
quot;
     rem   以上代码将array中第1个数据加1,第2个数据加2,第4个数据加4,第6个数据加6
     call :MapArray array All "fsutil file createnew $value$.txt"

EchoArray   <name> <flag>
example:
     call :EchoArray array "第$index$个元素是$value$&quot;

InsertAt   <name> <index> <value>
example:
     call :InsertAt array 0 我是第一个元素咯

InsertArray  <name> <index> <array>
example:
     call :CreateArray array 10 %%%%i
     call :CreateArray array2 4 新%%%%i
     call :InsertArray array 3 array2

RemoveArray   <name> <index> <count>
example:
     call :RemoveArray array 3 2
     rem 以上代码删去第4,5个元素

RemoveAll  <name>
example:
     call :RemoveAll array

IsEmpty    <name> <flag> {not}
example:
     call :IsEmpty array 空了空了
  call :IsEmpty array 里面还有东西呢 not

PushArray   <name> <value>
example:
     call ushArray array 我是新人

PopArray    <name> <result>
example:
     call :PopArray array Result

ReadArray   <name> <file>|<"" <tip> <endflag>>
example:
     call :ReadArray array input.txt
     call :ReadArray array "" Input: " "
     rem endflag即结束标志...以上代码表示输入的是空格时结束

FindArray   <name> <result> <findindex> <findstring>
example:
     call :FindArray array result 2 找我啊
  rem 以上代码查找array数组中第二个"找我啊",没找到返回$NULL$[/code]
  1. 示例:
  2. 创建50个文件夹
  3. call :CreateArray array 50 %%%%i
  4. call :MapArray array "md $value[code]示例:
  5. 创建50个文件夹
  6. call :CreateArray array 50 %%%%i
  7. call :MapArray array "md $value$&quot;
  8. 查找hello.txt文件中第二个hello
  9. call :CreateArray array 1 ""
  10. call :ReadArray array hello.txt
  11. call :FindArray array re 2 hello
  12. echo %re%
复制代码
quot;
查找hello.txt文件中第二个hello
call :CreateArray array 1 ""
call :ReadArray array hello.txt
call :FindArray array re 2 hello
echo %re%[/code]
  1. @echo off&setlocal enabledelayedexpansion
  2. exit
  3. :CreateArray
  4. set %~1_class=Array
  5. set %~1_length=%~2
  6. for /l %%i in (1,1,%~2) do set "%~1_%%i=%~3"
  7. goto :eof
  8. :GetLength
  9. set %~2=!%~1_length!
  10. goto :eof
  11. :SetAt
  12. if %~2 gtr 0 if %~2 leq !%~1_length! set "%~1_%~2=%~3"
  13. goto :eof
  14. :GetAt
  15. set  %~3=$NULL$&if %~2 gtr 0 if %~2 leq !%~1_length! set "%~3=!%~1_%~2!"
  16. goto :eof
  17. :EchoArray
  18. set out=%~2
  19. for /l %%i in (1,1,!%~1_length!) do set "t=!out:$index$=%%i!"&call,set "t=%%t:$value$=!%~1_%%i!%%"&echo !t!
  20. goto :eof
  21. :MapArray
  22. set "out=%~3"
  23. set fex=for %%i in (%~2)
  24. if "%~2"=="All" set "fex=for /l %%i in (1,1,!%~1_length!)"
  25. %fex% do set "t=!out:$item$=%~1_%%i!"&set "t=!t:$index$=%%i!"&call,set "t=%%t:$value$=!%~1_%%i!%%"&!t!
  26. goto :eof
  27. :InsertAt
  28. set/ab=%~2+1
  29. for /l %%i in (!%~1_length!,-1,%b%) do set/as=%%i+1&set "%~1_!s!=!%~1_%%i!"
  30. set/a%~1_length+=1
  31. set "%~1_%b%=%~3"
  32. goto :eof
  33. :InsertArray
  34. for /l %%i in (!%~1_length!,-1,%~2) do set/as=%%i+!%~3_length!&set "%~1_!s!=!%~1_%%i!"
  35. for /l %%i in (1,1,!%~3_length!) do set/as=%%i+%~2&set "%~1_!s!=!%~3_%%i!"
  36. set/a%~1_length+=%~3_length
  37. goto :eof
  38. :RemoveArray
  39. set/ab=%~2+1
  40. set/ae=%~1_length-%~3
  41. for /l %%i in (%b%,1,%e%) do set/as=%%i+%~3&call,set "%~1_%%i=%%%~1_!s!%%"
  42. set/a%~1_length-=%~3
  43. goto :eof
  44. :RemoveAll
  45. set %~1_length=0
  46. goto :eof
  47. :IsEmpty
  48. if %~3 "!%~1_length!"=="0" %2
  49. goto :eof
  50. :PushArray
  51. set/a%~1_length+=1
  52. set "%~1_!%~1_length!=%~2"
  53. goto :eof
  54. :PopArray
  55. set "%~2=%~1_!%~1_length!"
  56. set/a%~1_length-1
  57. goto :eof
  58. :ReadArray
  59. set %~1_length=0
  60. if "%~2" neq "" (for /f "delims=" %%i in (%2) do set/a%~1_length+=1&set "%~1_!%~1_length!=%%i")&goto :eof
  61. set/pt=%~3
  62. :k
  63. if "!t!"=="%~4" goto :eof
  64. set/a%~1_length+=1
  65. set %~1_!%~1_length!=!t!
  66. set/pt=%~3
  67. goto k
  68. :FindArray
  69. set %~2=$NULL$&set b=0
  70. for /l %%i in (1,1,!%~1_length!) do if "!%~1_%%i!"=="%~4" set/ab+=1&if !b!==%~3 set %~2=%%i&goto :eof
  71. goto :eof
复制代码
搞定...回家睡睡~

TOP

返回列表