AHK批量重命名工具V02

/*Kawvin批量重命名工具
    程序: Kawvin批量重命名工具
    作用: 批量重命名工具
    作者: Kawvin
    版本: 0.2
    使用方法:
		(1)见操作界面
		(2)支持参数发送,可做为QZ插件,QZ的参数: {file:"[P]";}
*/

Label_ScriptSetting:	;{ 脚本前参数设置
	#SingleInstance force
;}

Label_DefVar:	;{ 设置主参数
	AppName=Kawvin批量重命名工具
	AppVer=0.2
	HS:=35
	X1:=20
	Y1:=10, Y11:=Y1+5
	Y2:=Y1+HS, Y22:=Y2+5
	Y3:=Y2+HS, Y33:=Y3+5
	Y4:=Y3+HS, Y44:=Y4+5
	Y5:=Y4+HS, Y55:=Y5+5
	Y6:=Y5+HS, Y66:=Y6+5
	Y7:=Y6+HS, Y77:=Y7+5
	Y8:=Y7+HS, Y88:=Y8+5
;}

Label_DrawGUI:	;{ 绘制窗体
	Gui Add, Radio, section x%X1% y%Y1% w50 h21 vRunID gPreview,替换
	Gui Add, Radio,  x%X1% y%Y2% w50 h21 gPreview,替换
	Gui Add, Radio,  x%X1% y%Y3%  w50 h21 gPreview,替换
	Gui Add, Radio,  x%X1% y%Y4%  w50 h21 gPreview,插入
	Gui Add, Radio,  x%X1% y%Y5%  w50 h21 gPreview,插入
	Gui Add, Radio,  x%X1% y%Y6%  w50 h21 gPreview,删除
	Gui Add, Radio,  x%X1% y%Y7%  w50 h21 gPreview,删除
	
	Gui Add, Text, section y%Y11% w25 h21,替换
	Gui Add, Edit, ys-3 w130 h21 +Center vRep1_Old gPreview,
	Gui Add, Text, ys w15 h21,为
	Gui Add, Edit, ys-3 w140 h21 +Center vRep1_New gPreview,
	Gui Add, Text, section  xs y%Y22% w60 h21,替换正数第
	Gui Add, Edit, ys-3 w40 h21 +Center vRep2_Num gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys-3 w15 h21,个
	Gui Add, Edit, ys-3 w80 h21 +Center vRep2_Old gPreview,
	Gui Add, Text, ys w15 h21,为
	Gui Add, Edit, ys-3 w80 h21 +Center vRep2_New gPreview,
	Gui Add, Text, section xs y%Y33% w60 h21,替换倒数第
	Gui Add, Edit, ys-3 w40 h21 +Center vRep3_Num gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys w15 h21,个
	Gui Add, Edit, ys-3 w80 h21 +Center vRep3_Old gPreview,
	Gui Add, Text, ys w15 h21,为
	Gui Add, Edit, ys-3 w80 h21 +Center vRep3_New gPreview,
	Gui Add, Text, section xs y%Y44% w75 h21,从文件名头第
	Gui Add, Edit, ys-3 w40 h21 +Center vIns1_Num gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys w75 h21,个位置,插入
	Gui Add, Edit, ys-3 w120 +Center vIns1_Str gPreview,
	Gui Add, Text, section xs y%Y55% w75 h21,从文件名尾第
	Gui Add, Edit, ys-3 w40 h21 +Center vIns2_Num gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys w75 h21,个位置,插入
	Gui Add, Edit, ys-3 w120 h21 +Center vIns2_Str gPreview,
	Gui Add, Text, section xs y%Y66% w75 h21,从文件名头第
	Gui Add, Edit, ys-3 w40 h21 +Center vDel1_Num1 gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys w75 h21,个位置,删除
	Gui Add, Edit, ys-3 w75 h21 +Center vDel1_Num2 gPreview,
	Gui Add, UpDown, Range0-255
	Gui Add, Text, ys w45 h21,个字符
	Gui Add, Text, section xs y%Y77% w75 h21,从文件名尾第
	Gui Add, Edit, ys-3 w40 h21 +Center vDel2_Num1 gPreview,
	Gui Add, UpDown, Range1-255
	Gui Add, Text, ys w75 h21,个位置,删除
	Gui Add, Edit, ys-3 w75 h21 +Center vDel2_Num2 gPreview,
	Gui Add, UpDown, Range0-255
	Gui Add, Text, ys w45 h21,个字符
	Gui Add, Text, section x%X1%  h21,【动态预览】
	
	Gui Add, Text, section xs  h21,操作前:
	Gui Add, Text, ys  w350 h21 vOldName,原始名称
	Gui Add, Text, section xs  h21,操作后:
	Gui Add, Text, ys  w350 h21 vNewName,更改后的名称
	Gui Add, Button, section xs+60 w80 h40 ,执行
	Gui Add, Button, ys  w80 h40,预览
	Gui Add, Button, ys  w80 h40 ,清空
	Gui Add, Checkbox, ys+10 w75 h21 vContinuity,连续添加
	Gui Add, ListView,x450 y10 w500 h380,文件名|扩展名|路径
	Gui Add, Text, x450 y395  h21,Del:删除所选行;  Ctrl+Del:删除所有行
	LV_ModifyCol(1, 250)
	LV_ModifyCol(2, 50)
	LV_ModifyCol(3, 195)
	Gui, show, , %AppName%%AppVer%
	if 0>0
		gosub,GuiDropFiles
return
;}

Button执行: ;{  执行操作
	Gui,Submit,NoHide
	ErrorMsg:=""
	Loop % LV_GetCount()
	{
		LV_GetText(FileName, A_Index,1)
		LV_GetText(FileExt, A_Index,2)
		LV_GetText(FilePath, A_Index,3)
		if (RunID=1){
			NewName:=MyFunc_Run(RunID,FileName, Rep1_Old, Rep1_New)
		} else if (RunID=2){
			NewName:=MyFunc_Run(RunID,FileName, Rep2_Num, Rep2_Old, Rep2_New)
		} else if (RunID=3){
			NewName:=MyFunc_Run(RunID,FileName, Rep3_Num, Rep3_Old, Rep3_New)
		} else if (RunID=4){
			NewName:=MyFunc_Run(RunID,FileName, Ins1_Num, Ins1_Str)
		} else if (RunID=5){
			NewName:=MyFunc_Run(RunID,FileName, Ins2_Num, Ins2_Str)
		} else if (RunID=6){
			NewName:=MyFunc_Run(RunID,FileName, Del1_Num1, Del1_Num2)
		} else if (RunID=7){
			NewName:=MyFunc_Run(RunID,FileName, Del2_Num1, Del2_Num2)
		}
		OldFullPath=%FilePath%\%FileName%.%FileExt%
		NewFullPath=%FilePath%\%NewName%.%FileExt%
		IfNotExist,%OldFullPath%
		{
			ErrorMsg.=NewFullPath "`n"
		} else {
			filemove,%OldFullPath%,%NewFullPath%
			if (ErrorLevel>0 ){
				ErrorMsg.=NewFullPath "`n"
			} else {
				LV_Modify(A_Index, , NewName)
			}
		}
	}
	if (strlen(ErrorMsg)>0){
		ErrorMsg:="`n`n以下文件操作错误:`n" . ErrorMsg
	} 
	MsgBox, 64, 提示, 重命名完成!%ErrorMsg%
return
;}

Button预览: ;{  预览所有重命名
	Gui,Submit,NoHide
	PreviewStr:=""
	Loop % LV_GetCount()
	{
		LV_GetText(FileName, A_Index,1)
		if (RunID=1){
			NewName:=MyFunc_Run(RunID,FileName, Rep1_Old, Rep1_New)
		} else if (RunID=2){
			NewName:=MyFunc_Run(RunID,FileName, Rep2_Num, Rep2_Old, Rep2_New)
		} else if (RunID=3){
			NewName:=MyFunc_Run(RunID,FileName, Rep3_Num, Rep3_Old, Rep3_New)
		} else if (RunID=4){
			NewName:=MyFunc_Run(RunID,FileName, Ins1_Num, Ins1_Str)
		} else if (RunID=5){
			NewName:=MyFunc_Run(RunID,FileName, Ins2_Num, Ins2_Str)
		} else if (RunID=6){
			NewName:=MyFunc_Run(RunID,FileName, Del1_Num1, Del1_Num2)
		} else if (RunID=7){
			NewName:=MyFunc_Run(RunID,FileName, Del2_Num1, Del2_Num2)
		}
		PreviewStr.=NewName "`n"
	}
	MsgBox, 64, 重命名预览, %PreviewStr%
return
;}

Button清空: ;{  清空窗体
	Reload
return
;}

GuiDropFiles: ;{  拖动文件到窗体
	if 0 > 0
	{
		MySel=%1%
		MySel:=StrReplace(MySel,";","`n")
		;~ msgbox % MySel
	}else {
		MySel=%A_GuiEvent%
	}
	GuiControlGet,Continuity,,Continuity
	if (Continuity=0)
		LV_Delete()
	Loop, parse, MySel, `n,`r
	{
		if (A_LoopField="")
			continue
		If InStr(FileExist(A_LoopField), "D")  ;区分是否文件夹,Attrib= D ,则是文件夹
			continue
		SplitPath,A_LoopField,MyOutFileName,MyOutDir,MyOutExt,MyOutNameNoExt,MyOutDrive
		LV_Add(,MyOutNameNoExt,MyOutExt,MyOutDir)
	}
return
;}

Preview: ;{  动态预览
	Gui,Submit,NoHide
	try
		LV_GetText(FileName, 1, 1) ; 获取首个字段的文本
	catch e
		return
	if (FileName!=""){
		GuiControl,,OldName,%FileName%
		if (RunID=1){
			NewName:=MyFunc_Run(RunID,FileName, Rep1_Old, Rep1_New)
		} else if (RunID=2){
			NewName:=MyFunc_Run(RunID,FileName, Rep2_Num, Rep2_Old, Rep2_New)
		} else if (RunID=3){
			NewName:=MyFunc_Run(RunID,FileName, Rep3_Num, Rep3_Old, Rep3_New)
		} else if (RunID=4){
			NewName:=MyFunc_Run(RunID,FileName, Ins1_Num, Ins1_Str)
		} else if (RunID=5){
			NewName:=MyFunc_Run(RunID,FileName, Ins2_Num, Ins2_Str)
		} else if (RunID=6){
			NewName:=MyFunc_Run(RunID,FileName, Del1_Num1, Del1_Num2)
		} else if (RunID=7){
			NewName:=MyFunc_Run(RunID,FileName, Del2_Num1, Del2_Num2)
		}
		GuiControl,,NewName,%NewName%
	}
return
;}

MyFunc_Run(RunID,FileName,aPara1:="",aPara2:="",aPara3:="",aPara4:=""){ ; 文件名称替换函数
	NewName:=""
	if (RunID=1){
			NewName:=StrReplace(FileName, aPara1 , aPara2)
	} else if (RunID=2){
		FoundPos := InStr(FileName, aPara2,True,1, aPara1)
		NewName:=RegExReplace(FileName,aPara2,aPara3,,1,FoundPos)
	} else if (RunID=3){
		FoundPos := InStr(FileName, aPara2,True,-1, aPara1)
		NewName:=RegExReplace(FileName,aPara2,aPara3,,1,FoundPos)
	} else if (RunID=4){
		FoundPos:=aPara1-1
		NewName:=substr(FileName,1,FoundPos) . aPara2 . substr(FileName,FoundPos+1)
	} else if (RunID=5){
		FoundPos:=StrLen(FileName)+1-aPara1
		NewName:=substr(FileName,1,FoundPos) . aPara2 . substr(FileName,FoundPos+1)
	} else if (RunID=6){
		if (aPara2=0){
			NewName:=FileName
		} else {
			FoundPos:=aPara1-1
			NewName:=substr(FileName,1,FoundPos)  . substr(FileName,FoundPos+aPara2+1)
		}
	} else if (RunID=7){
		if (aPara2=0){
			NewName:=FileName
		} else {
			FoundPos:=StrLen(FileName)+2-aPara1-aPara2
			NewName:=substr(FileName,1,FoundPos-1)  . substr(FileName,FoundPos+aPara2)
		}
	}
	return ,NewName
}

Delete:: ;{  删除选中行
	FocusedRowNumber := LV_GetNext(0, "F")  ; 查找焦点行
	LV_Delete(FocusedRowNumber)
return
;}

^Delete:: ;{  全部删除
	LV_Delete()
return
;}

GuiClose:
	ExitApp




给TA捐赠
共{{data.count}}人
人已捐赠
其他

AHK进程管理

2021-12-2 14:52:03

其他

ahk轻松复制剪切

2021-12-2 14:52:15

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