在海棠果工程 早期预览版1中,仅仅演示了选择器和筛选器的使用,在早期预览版2后,整个控制台脚本系统的执行主体就完成了。
当前版本的程序下载
下载地址注意:此为微软SkyDrive存档,请用浏览器直接下载,用某些下载工具可能无法下载
示例程序运行环境:.NET Framework 3.0(在Windows Vista和Windows 7中默认已经被安装)
更新:
有人反映海棠果工程 早期预览版2的主程序(htg.exe)被360安全卫士检测为木马病毒。我测试后发现的确如此,360安全卫士给予的信息如下:
类型:木马-HEUR/Malware.QVM03.Gen
描述:木马通常利用系统的漏洞,绕过系统防御,达到:盗取账号、窃取资料、篡改文件、破坏数据的目的。经过360安全中心检验,此文件是木马,建议您立即处理。
扫描引擎:云特征引擎
文件路径:C:\Users\Mgen\Desktop\Mgen.Htg.EP2\htg.exe
文件大小:108.5K (111,104 字节)
文件版本:1.1.0.0
文件公司:
文件描述:Mgen Htg Project
文件指纹(MD5):6e0cb75b275b10f7b1427411007b5b61
处理建议:隔离文件
被误报病的的版本只针对海棠果工程 早期预览版2。我本人对此也表示很无奈,因为海棠果工程完全是C#编写的托管程序,甚至没有任何访问网络的代码,怎么可能是病毒?
简单查找了一下这个所谓的“木马-HEUR/Malware.QVM03.Gen”,发现网上很多人在报怨他们的程序被误报成这个病毒:
如果你不相信我说的话,或许你可以使用一些更专业的杀毒软件来检验一下海棠果工程 早期预览版2是否有病毒。
1. 对早期预览版1部分函数的重命名
为了方便输入,部分早期预览版1的函数被重命名,主要是选择器函数的重命名。
重命名结果如下:
早期预览版1的名称 - 早期预览版2更改后的名称
vtod - v_d
dtoallf - d_af
dtoalld - d_ad
dtorootf - d_rf
dtorootd - d_rd
2. Data Slot - 数据槽的使用
使用数据槽,便可以对当前执行数据进行存储或者重复利用。保存数据槽通过save_slot函数,参数是代表数据槽名称的字符串。加载数据槽函数是load_slot,参数同样是代表数据槽名称的字符串,当load_slot执行完毕后,相应数据槽的内容会替换当前数据(相当于一次setdata调用)。
做一个示例,首先用setata选择两个文件夹,然后保存至数据槽s,接着用setdata选择两个文件,然后调用show,这样显示的会是两个文件,因为之前的两个文件夹的数据已经被第二次setdata所覆盖了。然后加载之前保存的数据槽,接着调用show,这次会显示两个文件夹信息。
脚本:
ver1;
setdata dir ['c:\\' 'd:\\'];
save_slot 's';
setdata file ['c:\\a.txt' 'c:\\b.txt'];
show;
load_slot 's';
show;
运行结果:
3. Actions - 动作的支持
海棠果工程 早期预览版1中讲的选择器和筛选器都是对文件系统的查询操作,那么查询后的结果有什么用呢?第一当然是可以看,是吧,就像你用SQL去查询数据库然后数据库给你返回你需要的结果,海棠果工程的选择器和筛选器是一样的。当然,我们不仅仅可以浏览这些结果,还可以利用这些结果来做操作,这就是“动作”的含义。
在详细列举海棠果工程的动作前,我们先看一个简单的示例来说明动作。就拿一个最简单的动作来说吧:文件夹名称随机化,这个动作就是把文件夹的名称改成一个随机文本。函数名称是da.name_rand(da是所有文件夹动作的命名空间)。
这是我C盘a文件夹内的内容:
下面就利用海棠果工程中的“选择器”,“筛选器”和“动作”把这个文件夹内所有包含“副本”字样的文件夹进行随机重命名。结合已经学到的知识,我们首先需要选择器来选择文件夹C\a,然后再次选择它的所有根文件夹,接着用筛选器筛选出所有包含“副本”字样的文件夹,最后用动作执行随机重命名操作。
脚本如下:
ver1;
setdata dir ['c:\\a'];
d_rd;
d.name contain '副本';
save_slot 's';
da.name_rand 's';
当执行完毕后,再次打开刚才的C:\a文件夹,你会发现结果会类似这样:
所有包含“副本”字样的文件夹都被重命名了。
OK,一个简单的示例过后,我们继续详细讲海棠果种的“动作”。上面示例脚本的最后一行你可以看到,动作执行函数da.name_rand传入一个参数是s,而这个s正是倒数第二行save_slot保存的数据槽名称。为什么先介绍数据槽,就是因为动作需要参数,而参数的来源就得靠数据槽,随机重命名需要一个参数,所以只需传入一个数据槽名称,还有许多动作函数需要多个数据槽,比如文件复制功能。
下面这个例子,我们执行这样一个操作,将C盘b文件夹下的所有文件复制到C盘a文件夹中的所有根文件夹中。C盘a文件夹刚才已经做了重命名操作了(如上图),那么这个操作以后,上图中所有文件夹内都会包含C盘b文件夹中的内容。
文件复制到文件夹的操作函数是:fa.copyto(fa是所有文件操作的命名空间)。参数是两个字符串,分别代表两个数据槽名称。第一个数据槽代表所有文件列表。第二个数据槽代表所有复制到的文件夹列表。
脚本:
ver1;
setdata dir ['c:\\b'];
d_rf;
save_slot 'src';
setdata dir ['c:\\a'];
d_rd;
save_slot 'dest';
fa.copyto 'src' 'dest' yes;
OK,执行完毕后,每一个C盘a文件夹内的文件夹,都会有C盘b文件夹中的文件内容。
早期预览版2中搭载有如下动作函数:
文件操作动作的命名空间:fa
文件夹操作动作的命名空间:da
=========================
copy:复制
参数1:源路径数组
参数2:目标路径数组
参数3:
对于文件:bool:是否覆盖
对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite
move:剪切
参数1:源路径数组
参数2:目标路径数组
参数3:
对于文件:bool:是否覆盖
对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite
copyto:复制到文件夹
参数1:源路径数组
参数2:目标文件夹路径数组
参数3:
对于文件:bool:是否覆盖
对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite
moveto:复制到文件夹
参数1:源路径数组
参数2:目标文件夹路径数组
参数3:
对于文件:bool:是否覆盖
对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite
del:删除
参数1:路径数组
tcre, tmod, tacc:修改创建,修改和访问时间。
参数1:路径数组
参数2:时间
attr:修改属性
参数1:路径数组
参数2:Set,Add和Remove分别代表设置,增加和移除功能。
参数3:任何System.IO.FileAttributes成员
name_rand:随机重命名
参数1:路径数组
参数2(可选):文件名称长度(默认是20)
参数3(只针对文件):是否保留文件扩展名(默认是是)
所有路径数组参数都由数据槽来加载。
4. 对驱动器的选择器和筛选器支持
早期预览版1中只有最简单的对驱动器的选择器,而且还没有任何筛选器支持。在早期预览版2中添加了更多对驱动器的选择器和筛选器支持。
首先在setdata设置驱动器数据时,可以使用冒号来代表所有驱动器,注意setdata的第二个参数是数组,所以还是需要用中括号括住的,那么这样写:
ver1;
setdata drive [':'];
show;
结果:
其次还增加了许多针对驱动器的筛选器,如下:
驱动器筛选器
命名空间:v
type:驱动器类型
参数1:System.IO.DriveType枚举值
format:驱动器文件系统格式
参数1:字符串
total:总大小(容量)
参数1:大小(最小值)
参数2:大小(最大值)
free:可用空间
参数1:大小(最小值)
参数2:大小(最大值)
free_quota:可用空间(考虑用户配额)
参数1:大小(最小值)
参数2:大小(最大值)
volume_label:卷标
参数1:字符串比较类型
参数2:目标字符串
举例,首先输出所有可移动驱动器名称,接着输出所有文件系统格式是NTFS的驱动器。
脚本:
ver1;
setdata drive [':'];
v.type removable;
print '所有可移动磁盘';
show;
setdata drive [':'];
v.format 'ntfs';
print '所有文件格式为NTFS的磁盘';
show;
运行结果:
下方还会有提示:某些驱动器(比如光盘驱动器)因为没有插入任何光盘从而无法检查其文件格式。