批处理编程实用技巧预备100条,第一条开始:
批处理编程实用技巧 系列 001——变量的批量快速赋值
问题背景:
在写bat代码的时候,在很多情况下都要使用变量延迟,所以在脚本中 又长又易敲错的
“setlocal enabledelayedexpansion”使用的频率接近于“echo off”,而在命令行下则要以cmd /vn启动cmd.exe
cmd 提供的set 命令不能一次赋值多个变量(除了 使用/a 参数 对数字值变量的赋值 外),对普通变量的赋值常常要 用&来连接,或者每行一个set。
如果你对赋值命令的要求不是很高,且希望代码简短,请
保存以下代码为pset.bat 存放在windows文件夹下- :pset [/A variable=expression]; [variable=string]; ... [; variable]...
- @setlocal enabledelayedexpansion&set "arg=%*"
- @endlocal&set %arg:;=&set %&goto:eof
复制代码 用法说明:
分号作为赋值语句的分割符,也可以以一个分号后只跟一个变量名用来显示该变量的变量值
算法说明:
在命令下使用下面测试代码时,请将pset代码中endlocal前的@去掉,算法原理一览无余。
命令行下测试(无需开启变量延迟):- pset /a a=626,b=828,x=a+b+a*b;x;DT=!date!-!time!
复制代码 脚本调用中pset 请记得使用call 命令!
批处理中的批量 简洁 赋值法 涉及的问题还很多,比如,如何不使用!!,%%来展开变量的值,而是像c语言那样表达式般读取,在此不专门讨论了。
[ 本帖最后由 plp626 于 2010-11-9 20:55 编辑 ]
批处理编程实用技巧 002 一维数组
一维数组模拟可以有多种方法,这个方法相对来说代码比较简短,试用于编写函数库或者追求代码体积小巧者借鉴:
set array=a,b,c,d,1,2,3,4,5,6
set #c=1&set array_1=%array:,=&set/a#c+=1&set array_!#c!=%
上面两句相当于-
- set array_1=a
- set array_2=b
- set array_3=c
- set array_4=d
- set array_5=1
- set array_6=2
- set array_7=3
- set array_8=4
- set array_9=5
- set array_10=6
复制代码 说明以下,“array=a,b,c,d,1,2,3,4,5,6” 每个变量需要用仅有的一个逗号分开,如果了解原理,上面两句也可以改为用空格分割:
set "array=a b c d 1 2 3 4 5 6"
set #c=1&set array_1=%array: =&set/a#c+=1&set array_!#c!=%
运行后数组中变量的个数就是#c的值,我们可以把它存到array_0中,至于作用,大伙自然知道:
set "array=a b c d 1 2 3 4 5 6"
set #c=1&set array_1=%array: =&set/a#c+=1&set array_!#c!=%&set array_0=!#c!
[ 本帖最后由 plp626 于 2010-11-9 21:52 编辑 ] |