[AHK]一键给当前选中文件名加上日期(V1.6版本)

TC中要打开一个选项

圈选文件规则

;~ 1、点选最后一个文件,按着shift,选第一个文件。
;~ 2、点选第一个文件,鼠标再向上圈选。

;作者:Quant
;使用说明:
;1、在资源管理器或者TC中,点选1个或多个文件
;2、按win+z 将选中文件名更新为 名字-日期 形式
;3、按win+x 仅仅复制选中的文件的路径信息
;4、按win+v 将之前复制的文件路径中的第一条插入到Excel或Word当前位置作为超链接。

;功能:给文件名加上日期以备份之
;更新历史:

;~ V1.6
;时间:2017年1月11日11:06:01
;增加:win+v将复制的文件名插入到Word中作为超链接。
;修改:删除前判断是否改名成功,不成功则不删除

;~ V1.5
;时间:2017年1月11日09:00:01
;增加:win+v将复制的文件名插入到Excel中作为超链接。
;修正:结果报告的初始化bug

;~ V1.4
;时间:2017年1月10日18:29:40
;增加:结果反馈报告
;修正:优化逻辑判断,重构大函数为小函数,减少变量传递

;~ V1.3
;时间:2017年1月10日11:36:52
;增加:支持日期在前面情形
;修正:优化提示信息

;~ V1.2
;时间:2017年1月10日09:06:28
;修正:多个文件速度慢问题,将提示完成信息放到循环外

;~ V1.1
;时间:2017年1月8日18:16:25
;增加:支持批量处理
;修正:修复“对已更名后再次更名的会删除最新文件的bug”

;~ V1.0
;时间:2017年1月8日14:28:50
;实现了单文件名修改:1、有日期更新日期;2、无日期增加日期

;实现步骤如下:
;~ 1、获取当前文件名若含有日期例如AHK-2017-01-07.jpg则
;~ 2、用当前日期拼成新文件名AHK-2017-01-08.jpg
;~ 3、复制AHK-2017-01-07.jpg 为 AHK-2017-01-08.jpg
;~ 4、删除AHK-2017-01-07.jpg

;~ 1、获取当前文件名若不含有日期例如AHK.jpg则
;~ 2、用当前日期拼成新文件名AHK-2017-01-08.jpg
;~ 3、复制AHK.jpg 为 AHK-2017-01-08.jpg
;~ 4、删除AHK.jpg
#SingleInstance Force
doDelete:=1 ;设置0则不执行第4步的删除动作
isDebug:=0 ;设置1则会弹出对话况提示信息

#c:: 
#x:: ;复制文件
;不乱序的办法:
;~ 1、点选最后一个文件,按着shift,选第一个文件
;~ 2、点选第一个文件,鼠标再向上圈选。
filePath:=GetFilePath()
ToolTip %filePath%

return 

#IfWinActive ahk_class XLMAIN
#v:: ;设置Excel超链接
oExcel := ComObjActive("Excel.Application")  
r := oExcel.Selection.Row
c:= oExcel.Selection.Column
Loop,parse,filePath,`n,`r
{
	oExcel.Cells(r+A_index-1,c).Select	
	oExcel.ActiveSheet.Hyperlinks.Add(oExcel.Selection,A_LoopField,"","点击打开文件","超链接")  
}
return
#IfWinActive


#IfWinActive ahk_class OpusApp
#v:: ;设置Word超链接
oWord := ComObjActive("Word.Application")  
Loop,parse,filePath,`n,`r
{
	oWord.ActiveDocument.Hyperlinks.Add(oWord.Selection.Range,A_LoopField,"","点击打开文件","超链接")  
	send {enter}
}
return
#IfWinActive


	
		
#IfWinActive ahk_class CabinetWClass
#z::
ret:=""
bat(GetFilePath())
MsgBox %ret%
return
#IfWinActive

#IfWinActive ahk_class TTOTAL_CMD
#z::
ret:=""
bat(GetFilePath())
MsgBox %ret%
return
#IfWinActive
bat(filePath)
{
	Loop,parse,filePath,`n,`r
	{
		SetFlnmDate(A_LoopField)
	}
}
GetFilePath()
{
	IfWinActive ahk_class CabinetWClass
	{
		clipboard = ; 清空剪贴板
		Send, ^c
		ClipWait, 2
		if ErrorLevel
		{
			MsgBox, The attempt to copy text onto the clipboard failed.
			return
		}
		Clipboard=%clipboard%
		filePath= %clipboard%
	}
	IfWinActive ahk_class TTOTAL_CMD
	{
		SendTCCommand(2018) ;cm_CopyFullNamesToClip
		filePath=%clipboard%
	}
	
	return filePath
}

SendTCCommand(CommandID)
  { 
	SendMessage 1075, %CommandID%, 0, , ahk_class TTOTAL_CMD
  }
  
GetFolder(sName)
{
	SplitPath, sName,, o
	return % o . "\"
}
GetFilename(sName)
{
	SplitPath, sName, o
	return o
}
GetNameNoExt(sName)
{
	SplitPath,sName,,,,o
	return o
}
GetExt(sName)
{
	SplitPath,sName,,,o
	return % "." . o
}

SetFlnmDate(sName)
{
	tipStr:=""
	ToDay=%A_Year%%A_MM%%A_DD%  ;期望重命名后新文件为哪种日期格式
	FromDay:="[0-9]{4}[0-9]{2}[0-9]{2}"   ;此处为匹配哪种旧文件名中日期格式
	FoundPos := RegExMatch(sName,FromDay) 
	
	tName :=RegExReplace(sName,FromDay,Today) 
	if  (FoundPos>0)   			;找到日期信息
	{
		 if (sName<>tName) 	 ;有旧日期
		{
			tipStr.=sName . "旧文件需更新!"
			m(tipStr)
			if Rename(sName,tName) ;如果改名成功
				DeleteFile(sName)
		}
		else
		{
			tipStr.=sName . "已经是新文件!"
			m(tipStr)
		}
	}
	else										;未找到日期信息
	{
		tName :=GetFolder(sName) . GetNameNoExt(sName) . "-" . ToDay . GetExt(sName)
		if Rename(sName,tName) ;如果改名成功
			DeleteFile(sName)         ;则删除旧的,或者这里二次改名,改成增加括号之类的名字()
	}
	return  tipStr
}

Rename(sName,tName)
{
	FileMove,%sName%,%tName% ;复制一个新文件
	if (ErrorLevel)
	{
		tipStr.=sName . "改名失败:已存在新文件!"
		m(tipStr)
		flag:=0
	}
	else
	{
		tipStr.=sName . "已更新为->" . tName
		m(tipStr)
		flag:=1
	}
	return flag
}

DeleteFile(sName)
{
	global doDelete
	if (doDelete =1)
		{
			FileRecycle,%sName%
			tipStr.=sName . "已删除!"
			m(tipStr)
		}	
}
m(s)
{
	global isDebug,ret
	if (isDebug=1)
		MsgBox %s%
	else
		ret.=s . "`n"
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyukuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值