通用包处理工具v3支持脚本包,通过创建此格式的脚本包能快速复用已经作出的修改。

此页是关于脚本包的说明文件。

 

在当前版本中,脚本的支持通过专用的扩展来支持(Addin\UPB.ScriptEngine.dll),部分其它扩展对它有依赖(比如RDB支持扩展),因此不建议删除。

本页包含以下内容
什么是脚本包? [导航]

脚本包是『通用包处理工具v3』专用的一种脚本包格式,其本质是 ZIP 压缩包,可以使用 WinRAR、7Z、好压、WinZIP 等任何一款支持ZIP压缩格式的工具打开并修改。

通常来说,脚本包的扩展名是(.upb)。

 

脚本包里面通常含有一个脚本文件(upb3.txt),以及若干资源文件(可能有,也可能没有)。

一个正确的脚本包结构如下:

 

在图中,upb3.txt 是必须的,这是主要的脚本文件。而文件则是资源文件,主要供脚本操作中替换时使用的新文件。

 

你可以将文件解压后进行手动修改。修改完毕再次打包为zip格式,并修改扩展名为 .upb 即可。

创建脚本包 [导航]

你可以很方便地通过现有的修改来创建一个脚本包。

 

第一步,在软件中打开你要修改的包文件;

第二步,做出你需要的修改(删除文件,添加文件,替换文件等等);

第三步,创建脚本包。

 

请注意:在修改完成后不要点击保存,因为脚本引擎需要跟踪你的修改才能正确生成脚本包,一旦保存,这些跟踪将会被清除!

 

完成修改后,点击菜单“工具”-“UPB脚本”-“保存当前修改为脚本……”

 

此时软件会弹出下面的对话框:

 

相关选项说明:

  • 要生成脚本的包:选择你要生成脚本的包文件;当前尚不支持一次性修改多个包;
  • 脚本说明:在脚本文件中的注释;如果勾选“开始执行时显示‘脚本说明’弹窗”,则也会弹出此信息;
  • 包括修改的类型:指定哪些修改操作需要保留并生成脚本,默认是全选的;
  • 添加注释:选择此选项时,生成的脚本中将自动加入相关注释内容;
  • 将文件复制到脚本所在目录:选中此选项时,对于添加、修改的文件,将会把新文件同步复制到脚本包中,从而能实现自动替换;如果不勾选,则脚本运行时会弹出打开对话框要求你选择新文件;
  • 开始执行时显示“脚本说明”弹窗:是否在脚本开始运行时自动弹出『脚本说明』中设置的文本;
  • 添加自动保存脚本:如果勾选,则会添加保存脚本,用以在修改完成后自动保存并关闭当前文件;否则完成后会停止运行,等待用户手动保存和关闭。

 

确定后,在弹出的对话框中设置脚本包的保存位置,保存即可。

手动编辑脚本①:脚本的格式 [导航]

如果你需要手动修改脚本,请阅读本章节。

 

UPB3的脚本引擎使用的是一种类批处理脚本,脚本比较简单明了。提供的命令依据软件的版本和插件的不同而不同。

 

UPB3脚本约定:

类别解释
 注释

 脚本执行时会被忽略的行,在行间跳转时也不计算在内。注释行以“#”开始。

例:# 这是一行注释

 命令行

 脚本执行的语句。命令行是一个命令加上一个或多个参数(也可以没有)。
命令和参数、参数和参数之间,使用空格或Tab进行分隔。

例如:

save
open Res.rdb

 命令语句

 单独的一个英文单词,在写的时候并不区分大小写。例如:

save
open

 参数

 一般一条命令的参数个数不等,视命令而定。参数一般不需要分隔符,如数值 34 作为参数时直接写 34 即可。
特别的,对于字符串内容,如果其中不包含空格、Tab等分隔符时,也不需要加引号进行区分;如果包含空格等分隔符,则需要加引号进行限制。
字符串中支持转义符,如你可以使用 \t 表示一个Tab、用\r表示一个换行。支持的转义符包括:\r, \n,\t,\',\",\\。需要注意的是,如果变量的字符串中出现了“\”号,那么必须进行转义。例如:

34

常规字符串
"带空格 字符串"

"这里有\n换行符"

变量栈

栈用于在脚本执行时记录临时的环境变量,依据先进后出的顺序操作。
栈变量只能用于参数中,格式是:{编号}。当一个参数中存在多个栈变量时,编号应由0递增。分析参数时,脚本引擎会依据数量从当前的执行栈中弹出指定数目的值并填充到对应的位置。如果数目不匹配,将会导致脚本异常中止。例如:

messagebox {0}

系统变量 脚本引擎支持在参数中使用系统变量,使用格式与常规相同。如:
%UserProfile%
脚本变量

脚本变量是脚本执行时的软件环境,分为临时变量和全局变量。当取值的时候,临时变量优先(即变量都存在时,优先取临时变量)。使用格式是:${变量名},如:

${scriptPath}

手动编辑脚本②:脚本变量 [导航]

脚本变量分为临时变量和全局变量。脚本变量由软件和插件共同注册,可以使用的数量依据版本和插件而不同。

 

当前发布版本全局变量列表:

变量名值介绍位置版本需求
UPBTEMP  本软件运行时的临时目录 核心 3.0
UPBROOT  本软件所在目录 核心 3.0
UPBVersion  本软件的版本 核心 3.0
Tencent:QQ  QQ的安装目录 Rdb 3.1
Tencent:TM  TM的安装目录 Rdb 3.1

当前发布版本临时变量列表:

变量名值介绍位置版本需求
scriptPath  正在执行的脚本的路径(文件夹路径) 核心 3.0
scriptFileName  正在执行的脚本的文件名(不包含路径) 核心 3.0
手动编辑脚本③:包操作命令 [导航]

Open [文件名]

  • 用于打开一个包文件;
  • 参数中的文件名是用于打开指定的文件。如果没有指定文件名,或指定的文件名不存在,则会弹出打开文件的对话框;
  • 如果打开成功脚本会继续执行;如果请求用户选择文件时用户选择了取消,或选定的文件无法支持,则会打开失败,脚本停止执行。
  • 当一个包文件打开后,这个包会成为当前正在操作的包文件

 

Save

  • 当前包修改完成后,此命令用于让软件执行保存操作。

 

SaveAs [文件名]

  • 用于将当前修改后的包文件保存为一个新文件
  • 参数中的文件名是指新文件的名称和路径;如果没有指定,则会弹出另存对话框请求选择;

 

Close

  • 此命令用于关闭当前正在操作的包文件

 

 

 

手动编辑脚本④:节点操作命令 [导航]

AddFile [目标节点路径] [新文件路径]

  • 此命令用于添加一个新文件到当前的包中的指定路径,如果指定的路径已经存在,则效果等同于替换;
  • 目标节点必须存在,不存在的节点会导致异常。为空时将在包的根节点下增加文件;
  • 新文件路径不指定或不存在时,将会提示用户选择;如果用户取消选择,则中止脚本执行。

 

AddFolder [目标节点路径] [新文件路径]

  • 此命令用于添加一个新文件夹到当前的包中的指定路径,如果指定的路径已经存在,则效果等同于替换;
  • 目标节点必须存在,不存在的节点会导致异常。为空时将在包的根节点下增加文件夹;
  • 新文件路径不指定或不存在时,将会提示用户选择;如果用户取消选择,则中止脚本执行。

 

Delete [目标节点路径]

  • 此命令用于删除包中指定路径的文件或文件夹。
  • 目标节点是指要删除的目标路径。如果没有指定,则删除当前操作路径。

 

Replace [目标节点路径] [新文件路径]

  • 此命令用于将指定路径的文件替换为新文件;
  • 目标节点路径可以是文件和文件夹,但必须和新文件路径的类型匹配,也就是如果要替换的是文件,那么新文件也必须是文件;如果要替换的是文件夹,那么新文件也必须是文件夹;
  • 替换的时候,原始目录里的文件会被删除;
  • 新文件路径没有指定时,或指定的路径不存在时,将会弹出对话框请求用户选择;
  • 如果没有能成功替换,则脚本将异常中止。

 

Export [节点路径] [目标路径]

  • 此命令将导出包的目标路径到目标目录下;
  • 节点路径是指要导出的指定节点的路径,例如“Xtml\2052”;是文件夹或文件均可。如果为空字符串,则使用当前操作节点。
  • 请注意目标路径,如果不限定为完整路径,则是相对于脚本执行的路径,但脚本执行时的当前目录不等于原始脚本文件路径;参见注意事项。
  • 举例: Export "Xtml\\2052" ${scriptPath}

 

ExportAll [目标路径]

  • 此命令将导出当前包的所有文件到目标目录下;
  • 目标目录的组成格式是:“目标路径\包文件名”
  • 请注意目标路径,如果不限定为完整路径,则是相对于脚本执行的路径,但脚本执行时的当前目录不等于原始脚本文件路径;参见注意事项。
  • 举例: ExportAll ${scriptPath}

 

SetSelectedAsCurrent

  • 此命令将当前主窗口中正在选定的包文件和节点作为当前操作的包和节点
手动编辑脚本⑤:引擎命令 [导航]

MessageBox [信息内容] [类型] [OK-偏移] [NO-偏移]

  • 用于弹出用户信息对话框或提示对话框
  • 信息内容是要显示的文本
  • 类型指定显示的对话框的功能,可选值为“info”,“error”,“alert”,“question”,默认是info。分别对应了信息、错误、警告、提示确认四种图标类型。其中question类型会显示确定和取消,根据用户选择可做出跳转。
  • OK-偏移:当用户点击确定时进行指定的偏移,继续执行应设置为0。如果不设置,将会导致脚本中止执行。
  • NO-偏移:当用户点击确定时进行指定的偏移,继续执行应设置为0。如果不设置,将会导致脚本中止执行。
  • 跳转的偏移量以当前下一步执行的语句为基准。

 

GOTO [偏移]

  • 用于在脚本中跳转下一步执行位置。
  • 跳转的偏移量以当前下一步执行的语句为基准。
  • 执行后,下一步执行的位置=当前下一步执行位置+偏移 处所对应的命令行
  • 版本需求:3.1

 

Pop

  • 从执行数据栈上弹出一个变量

 

Push [变量]

  • 将指定的变量值压到执行栈上
手动编辑脚本⑥:系统命令调用 [导航]

Shell [命令行] [命令行参数] [标记位]

  • Shell 命令可调用系统任何可执行程序或文件
  • 命令行是指要执行的程序路径
  • 命令行参数是启动对应程序时使用的命令行参数
  • 标记位用于指定标记的方法。这是一个字符串参数,多个标记用逗号分开,不区分大小写。可用的标记位参照下表。
标记名解释
 hide 不显示进程窗口,隐藏执行
 min 执行的时候窗口最小化
nowindow 执行的时候不创建对应的应用程序窗口
shellexec 使用Shell方式执行;不指定此标记位时,一律将目标文件当作可执行程序启动。
wait  等待进程结束后再继续执行
ignoreerror  忽略无法执行的错误;否则一旦启动失败会导致脚本异常退出。
手动编辑脚本⑧:RDB插件提供的命令 [导航]

OpenQQRdb

  • 此命令和Open很类似,都是打开文件用的。不同之处在于这个命令是专为打开QQ/TM的RDB文件设计的
  • 执行后会弹出选择RDB的对话框,如附图。用户选择即可。
  • 如果用户取消,则会继续弹出原始的打开文件对话框。

 

OpenQQRdb命令的选择对话框

手动编辑脚本:注意事项 [导航]
  1. 在相关操作文件时,选定新文件时如果指定的是相对路径,那么相对的是脚本执行目录;脚本执行目录不等同于脚本所在目录,你可以将脚本执行目录看作是和脚本包内一个层次的目录;
  2. 有跳转偏移的时候,跳转的基准是当前的下一句执行位置,为0则不做任何更改继续执行;为-1则回退一行,实际上是回退到当前执行的语句重新执行一次。