解析文本, 转换路径参数,配合runany使用

通过字符串替换, 将带变量的命令行解析成可执行命令行

示例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”

变量说明

  1. #path# = 文件绝对路径, 示例: E:\test\3.png
  2. #dir# = 文件夹路径, 示例: E:\test\
  3. #nameNoExt# = 不带后缀文件名, 示例: 3
  4. #name# = 带后缀文件名, 示例: 3.png
  5. #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
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
应用

一分钟输入法4.0

2023-9-20 22:11:31

应用

win10任务栏透明

2023-9-24 19:03:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索