通过字符串替换, 将带变量的命令行解析成可执行命令行
示例1: magick(E:\test\3.png, convert $1 $2, $1=#path#|$2=#dir#\#nameNoExt#.jpg, 0)
解析后命令为 magick convert “E:\test\3.png” “E:\test\3.jpg”
- 第一个参数为传入的文件路径, 支持多个
- 第二个参数为带变量的运行命令, 变量以$开头, $1表示第一个变量
- 第三个参数为变量对应的值, 需要进行解析
- 第四个参数为是否处理批量文件
- 批处理为0时, 根据传入的文件路径个数, 执行多次运行命令, 上面示例则是执行多次 magick convert
- 批处理为1时, 只执行一次运行命令, 传入多个文件文件路径会被合并成变量#path#
示例2: magick(E:\test\1.png E:\test\2.png,convert -delay 10 -loop 0 $1 $2,$1=#path#|$2=#dir#\#nameNoExt#_1.gif,1)
解析后命令为 magick convert -delay 10 -loop 0 “E:\test\1.png” “E:\test\2.png” “E:\test\1_1.gif”
示例3: magickBox(E:\test\3.png, convert $1 $2, $1=#path#|$2=#dir#\#nameNoExt#.$3, 输入图片类型, $3, 0)
该方法会出现弹框, 每个弹框输入的是对应的变量值
- 第一个参数为传入的文件路径, 支持多个
- 第二个参数为带变量的运行命令, 变量以$开头, $1表示第一个变量
- 第三个参数为变量对应的值, 需要进行解析
- 第四个参数为弹框标题, 多个弹框用| 分开
- 第五个参数为弹框输入的值,多个弹框值用|分开
- 第六个参数为是否处理批量文件
- 批处理为0时, 根据传入的文件路径个数, 执行多次运行命令, 上面示例则是执行多次 magick convert
- 批处理为1时, 只执行一次运行命令, 传入多个文件文件路径会被合并成变量#path#
解析后命令为 magick convert “E:\test\3.png” “E:\test\3.jpg”
变量说明
- #path# = 文件绝对路径, 示例: E:\test\3.png
- #dir# = 文件夹路径, 示例: E:\test\
- #nameNoExt# = 不带后缀文件名, 示例: 3
- #name# = 带后缀文件名, 示例: 3.png
- #ext# = 文件后缀名, 示例: png
;magick处理
magick(getZz:="", commond:="", param:="", isBatch := 0){
commond := "magick " commond
dealMyfunc(getZz, commond, param, isBatch)
}
;magick处理
magickBox(getZz:="", commond:="", param:="", MsgTitles :="", MsgKes := "", isBatch := 0){
msgKeyList := StrSplit(MsgKes, "|")
MsgTitleList := StrSplit(MsgTitles, "|")
For index, key in msgKeyList {
InputBox, OutputVar , % MsgTitleList[index] , , , , , , , zh-CN, ,
if(StrLen(OutputVar) == 0) {
MsgBox, , 警告, 输入信息为空, 2000
Return
}
commond := StrReplace(commond, key, OutputVar)
param := StrReplace(param, key, OutputVar)
}
; MsgBox, % commond "`n" param
commond := "magick " commond
dealMyfunc(getZz, commond, param, isBatch)
}
;任务处理
dealMyfunc(path, commond, param, isBatch := 0){
if(isBatch) {
textResult:=""
Loop, parse, path, `n, `r, %A_Space%%A_Tab%
{
if(!A_LoopField)
continue
SplitPath, A_LoopField, name, dir, ext, nameNoExt
textResult.= """" A_LoopField """ "
}
RunCommond(textResult, name, dir, ext, nameNoExt, param, commond)
} else {
Loop, parse, path, `n, `r, %A_Space%%A_Tab%
{
if(!A_LoopField)
continue
SplitPath, A_LoopField, name, dir, ext, nameNoExt
textResult := """" A_LoopField """ "
RunCommond(textResult, name, dir, ext, nameNoExt, param, commond)
}
}
}
RunCommond(path, name, dir, ext, nameNoExt, param, commond) {
allValue := { "path": path, "name": name, "dir": dir, "ext": ext, "nameNoExt": nameNoExt}
paramList := StrSplit(param, "|")
for index, pair in paramList
{
; 拆分键值对,获取键和值
keyValue := StrSplit(pair, "=")
key := keyValue[1]
tvalue := keyValue[2]
paramValue := StrSplit(tvalue, "#")
facValue := ""
for idx, pv in paramValue
{
remainder := Mod(idx, 2)
if(remainder == 0) {
facValue.= allValue[pv]
} else {
facValue.= pv
}
}
if(InStr(tvalue, "path") == 0) {
facValue := """" facValue """"
}
; 输出当前键和值
; MsgBox % "Key: " . key . "--Value: " . facValue
commond := StrReplace(commond, key, facValue)
}
; MsgBox, % commond
RunWait, % commond, , Hide
}