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"
}