|
wtcmd(by shoulea) v1.1 readme
wtcmd 已经全面更新了!
新亮点1:人性化的语法
------------------------------------------------------------------
继 makeargv 这个重要函数之后,我又实现了一个名为 parsargv 的函数,它的使用使 wtcmd 的语法变得十分优美,而且命令的编写也更加容易了!
再次考虑 1.0 beta1 中消息框示例,那时我们的代码是:
wtcmd mess "Hello, world!" -c hello -i i -m oc -t 5000
现在这个代码仍受支持,不过我们可以有更加漂亮的方式:
wtcmd mess "Hello, world!" --caption=hello --icon=infomation --mode=OKCancel --timeout=5000
两个代码表示了完全相同的意思,但后者具有更好的可读性。
wtcmd 像 Unix 的命令行工具那样处理命令行参数,用“--”引导长选项,用“-”或“+”引导短选项。
对同一命令几乎总是可以同时使用全名(像上面的第二个代码)和缩写(如第一个代码),仅个别全名无缩写,全名与缩写可以混合使用。如可用下面代码实现同上面相同的效果:
wtcmd mess "Hello, world!" -c hello -i i --mode=OKCancel -t 5000
命令的选项(指被“--”“-”或“+”所引导的参数)和普通可以用任意顺序指定,也就是说,上面的代码又可写作:
wtcmd mess -c hello "Hello, world!" --mode=OKCancel -t 5000 --icon=information
大小写的限制完全去除,现在选项的名字或其缩写也可用大写字母,如:
wtcmd mess -C hello "Hello, world!" --MODE=okcancel -t 5000 --icon=INFORMATION
新亮点2:形象的语法
------------------------------------------------------------------
数字、字符串和列表是重要的工具,对它们的处理方式直接决定命令文件的易写性和可读性,wtcmd 1.1 使用形象的语法对它们进行处理。
先看数字。calc 命令提供了对四则运算的完全支持,并可用括号任意嵌套。看下面的代码:
wtcmd calc x = (3 + 2) * 7 ; mess $x
您将看到正确结果:35
再来看字符串。wtcmd 对字符串提供了最灵活的支持,可以用各种方法作用到目标字符串上,从而生成新的字符串,如:取子串,查找,替换,像 bat 用 %~dpnx1 的方式提取路径的各部分。
wtcmd s = "012345" --left=3 ; mess $s
这取出了左边的 3 个字符。
wtcmd s = "AxaxxAyxxa" "ax" "*" --replace ; mess $s
这将串中的子串“ax”全部换成了“*”。
wtcmd s = "%windir%\system32\notepad.exe" --get=dnx ; mess $s
一个完整的路径分为“驱动器 driver -- d”“路径 path -- p”“名字 name -- n”“扩展名 extension -- x”四部分,上面只指定了“dnx”,因而结果为“C:notepad.exe”(假定非 PE,系统盘为 C)。
再看列表。可以向列表增元素,删除元素,也可用新元素替换部分元素。默认使用换行符“\n”作为分隔符(尤其是对操作符“<<”和“>>”,即 wtcmd 希望您逐行处理数据,这样高效而方便),但对于“<<”和“>>”之外的操作,您可以使用 --delimitor 选项或其缩写 -d 指定一个分隔符。
wtcmd mess $path ; path : --add D:\Programs --delimitor=";" ; mess $path
通过两个消息框,您将看到 --add 操作向 path 搜索路径列表增加了一个新元素“D:\Programs”。
将下面的代码存为 d:\a.txt,用命令 wtcmd d:\a.txt 观看效果。
list = ""
list << "当前的临时目录为:"
list << "%temp%"
mess $list
<< 向列表增元素(使用换行符作为分隔符,而且不能改变),从而构造了一个具有两行文字的消息框。另请注意,现在同时接受“%”和“$”引导的环境变量展开。
新亮点3:强大的语法
------------------------------------------------------------------
wtcmd 现在完全支持了 C 语言支持的各种流程控制语句,while/for/if/switch 四种语句都得到了支持!
与 1.0 的配对方案 while ... loop 和 if ... end 不同,1.1 仅用关键字 sub/while/for/if/switch 开头,用同一个关键字 end 结尾。
看看 while 循环:
i = 0
while i < $#
calc i += 1
mess ${$i}
end
将上述代码存为 d:\a.txt,用命令“wtcmd d:\a.txt a b c”观看效果,可以看到它用消息框显示了传递的参数“a b c”。
注意:$# 是传递的参数个数,而${$i} 是变量的多重展开,与 1.0 是一样的用法,只是不再支持随机数生成“$?”,作为替代,可用“num = --random”在变量 num 中获取一个随机数。
实际上,要想列举参数,可以用更棒的方法:
for --argv
mess $_
end
除了参数,也可以用 for 语句在其他列表上作循环,也可以传递 --reverse 选项,这样可以反向遍历列表:
for --reverse
mess $_
end
注意,其中列举参数是默认的操作,因此上面并没有再写出 --argv。上面两个代码中的“$_”即是列表中的当前元素。
if 语句现在是完整的语句(lmle 曾指出没有为 if 设计 else,其实是当前自己思路被搞混了,现在经过思考终于将其搞定了),甚至可以有 else if。
x = 5
if $1 > x
mess "传递的数比 x 大。"
else if $1 < x
mess "传递的数比 x 小。"
else
mess "传递的数与 x 相等。"
end
将代码存为 d:\a.txt,用命令“wtcmd d:\a.txt 5”观看效果。(非常抱歉,由于“-”作为负号与选项引导字符冲突,暂时不能传递负数,这将在将来得到修正。)
switch 语句是另一个很好用的语句:
switch $1
case "apple" "pear"
mess "您传递的是一种水果。"
case "panda" "cat"
mess "您传递的是一种动物。"
default
mess "抱歉,不能作出判断。"
end
不用我再说怎样观看效果了吧!
其他地方的改进
------------------------------------------------------------------
本次更新主要是核心的更新,80% 的代码经过了改进。最大的一点是现在可以同时编译为 ANSI 版本和 Unicode 版本,当然我们更喜欢 Unicode 版本,之所以使其也能以 ANSI 方式编译,是希望如果 DOS 或其他地方可能需要 wtcmd,改动的地方更小,实际上 util 中的代码,绝大部分现在已经可在 DOS 上用 Turbo C 编译了!
当然命令方面并非完全没有改进,实际上正由于 parsargv 的亮相,所有命令的选项分析都重新写过了,即是前面说的使得语法更优美。
由于 parsargv 使得命令选项的处理更容易,命令有了更多的灵活性,如 1.0 中用 file 命令删除文件时,如果以“\”开头,如“\pagefile.sys”会导致所有盘下的 pagefile.sys 被删除,现在这是一个可选的功能。
rm \pagefile.sys
只删除当前盘下的 pagefile.sys,即“%CurDrv%\pagefile.sys”,而:
rm \pagefile.sys --extension
或
rm \pagefile.sys -x
与原来的做法具有相同的效果。
注意,原来的 FILE 命令其功能被分到了三条命令中:rm -- 删除(remove),cp -- 复制(copy),mv -- 移动(move)。
总之,wtcmd 正变得越来越易于使用,欢迎继续关注,并提出宝贵的意见与建议!
wtcmd v1.1 by shoulea
7:25 2010-10-2 |
|