这个题倒是让我想起了如何用bat操作数组。本想模拟几个数组处理函数,还没设计好。- @echo off
- setlocal enableDelayedExpansion
- set num=100
- set class_num=10
- for %%a in (A B C D) do (
- call :getRanArr %%a 1 %num%
- set %%a=!%%a:#=%%a!
- )
- set backdoor1=B60
- set backdoor2=C49
- set target1=3
- set target2=8
- set /a cnt = num / class_num
- for /l %%a in (1 1 %class_num%) do (
- for %%x in (A B C D) do (
- for /l %%i in (1 1 %cnt%) do (
- for /f %%A in ("!%%x!") do set class_%%a=!class_%%a! %%A& set %%x=!%%x:*%%A =!
- )
- )
- echo class %%a:
- echo !class_%%a:~1!
- echo;
- if /i "!class_%%a:%backdoor1%=!" neq "!class_%%a!" set postion1=%%a
- if /i "!class_%%a:%backdoor2%=!" neq "!class_%%a!" set postion2=%%a
- )
- echo yesterday: %backdoor1%=%postion1%, %backdoor2%=%postion2%
- echo;
- call :go_backdoor 1 //后来加的
- call :go_backdoor 2
- echo;
- pause
- exit /b
-
- :go_backdoor //^_^//
- set backdoor=!backdoor%1!
- set postion=!postion%1!
- set target=!target%1!
- set class_%postion%=!class_%postion%:%backdoor%=...!
- set class_%target%=!class_%target%! %backdoor%
- rem catch a scape-goat
- set level=%backdoor:~0,1%
- set str=!class_%target%:*%level%=!
- for /f %%a in ("!str!") do set scape-goat=%level%%%a
- set class_%target%=!class_%target%:%scape-goat% =!
- set class_%postion%=!class_%postion%:...=%scape-goat%!
- echo new class %postion%:
- echo !class_%postion%!
- echo new class %target%:
- echo !class_%target%!
- echo;
- goto :eof
-
-
- :getRanArr arrName start end [step] //不对参数作合法性检查,coder自己保证参数的正确性
- setlocal enableDelayedExpansion
- set /a "start=%2, end=%3, step=(^!(%40/10))|(%40/10)"
- set "_ret="
- for /l %%a in (%start% %step% %end%) do set #_!random!_%%a=1
- for /f "tokens=2 delims=#_=" %%a in ('set #_') do set _ret=!_ret! #%%a
- endlocal & set %1=%_ret:~1%
- goto :eof
-
- rem ToDo: find time to implement these function
- rem How about letting bat operate array? Crazy or not?
-
- :shuffle arrName len cnt //洗牌
-
- :slice arrName start [end] //返回一个数组的一段(指定起停)
-
- :sliceLen arrName start length //返回一个数组的一段(指定长度)
-
- :splice arrName start deleteCount //从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素
复制代码
|