记录:Auto Hotkey自动分类文件
- 前言
- 下载
- 安装
- .ahk文件
前言
windows自带的xbox录屏很好用,以前打游戏时经常win+alt+G录下一些高光操作,时间一长整个捕获文件夹特别的大,几年前我把它从c盘移到了d盘,我的d盘是个机械盘,经过几年的录制,视频文件太多,导致打开捕获文件夹时经常要卡特别久的时间,那视频多就分类一下放到不同的文件夹里这样一层目录就不会太多文件了。问了GPT,xbox的录屏能否根据录制的程序自动归类,GPT说:Auto Hotkey(AHK)可以做到。(艹突然想到python不是更方便吗,都怪上课不好好听,连Python都不会写)
仅作个人记录
下载
AHK的github:https://github.com/AutoHotkey/AutoHotkey
AHK的官网:https://www.autohotkey.com/
我一开始选的是 v2.0(后面写不明白代码还是下了 v1.1)
安装
下完了之后本来想安装在d盘,但是他提示必须得安装在 Program Files
下面,那就装在c盘默认位置。
.ahk文件
安装完成之后会弹出一个窗口(现在找不着在哪了qwq),点击创建空白新脚本,然后就让你选放在哪,我就直接新建个文件夹单独放这个文件,给他起个名字。
他还会让你选用什么编辑器打开这个.ahk文件,我选了vscode打开。
本来想着看一下文档自己写一下,发现自己实力不够(我觉得他官方文档写的有点碎,翻了一下没找到我要的东西)
所以直接叫GPT给我写,写了改,改了又改,一直报错,我就问GPT到底懂不懂v2的语法,他老说他懂,写出来又一直报错,说这个方法不存在,那个参数是非法的。
搞得我很烦,就出去跑了会步,回来按照GPT给的第一版代码改吧改吧试运行了一下,提示我要用v1.1,我就点了“是”(前面一直不想用v1.1,是因为我觉得有新的不用干嘛用旧的),AHK就自动给我下载安装了v1.1。
整个过程完全不用我动手,右小角还会有弹窗提醒进行到哪一步了,很贴心。
用v1.1运行之后报了一个错说 FileCreateDir(gameDir)是不存在的function
,我按GPT提示的改了调用格式 FileCreateDir, % gameDir
,诶一下就跑起来了。
我一看好家伙就一会儿我的视频全移好了(wok我的分类逻辑还没写好),就这样稀里糊涂分类好了。
后面又改了改,优化了一下分类逻辑(按游戏名分类,xbox的录屏一般是带一串yyyy-mm-dd hh-mm-ss的,所以直接截取这一段前面的字符串当文件夹名称就好了)
然后就是这个.ahk文件的运行间隔,因为我把他设置成自启动(win+r打开运行框输入shell:startup,点确定,在弹出来的文件夹里右键新建快捷方式,选中上面写的.ahk文件,给他起个名就好了),所以我觉得他启动之后不能马上运行,至少得十分钟之后进行首次sort,然后后面每3小时sort一次,就又给他加了这个功能(突然觉得不用弄自启动啊,把它弄进计划里面,每30天执行一次好像更香)
#Persistent ; 使脚本保持运行状态
; 设置初始定时器,10分钟后检查一次
SetTimer, CheckNewFiles, 600000
; 设置一个变量,用于后续每3小时检查一次
checkInterval := 18000000 ; 3小时
isFirstCheck := true ; 标记是否是第一次检查
; 设置捕获文件夹路径
captureFolder := "D:\Captures" ; xbox录屏的位置
; 设置分类文件夹路径(我原本的Captures太卡了我怕它新建文件夹太卡就直接在外面给他新建个文件夹用于整理)
gameFolder := "D:\CapturesSort"
CheckNewFiles() {
global captureFolder, gameFolder, isFirstCheck, checkInterval
; 使用 Loop 遍历文件夹中的所有视频文件
Loop, Files, % captureFolder "\*.mp4"
{
; 获取文件的基础名称
fileName := A_LoopFileName
; 检查文件名是否包含 "Chrome"(经常看直播,在浏览器录了挺多视频的)
if InStr(fileName, "Chrome") {
gameName := "Chrome" ; 如果包含,则将 gameName 设置为 "Chrome"
} else {
; 使用正则表达式提取日期之前的所有字符串作为游戏名称
RegExMatch(fileName, "^(.*?)\s*20\d{2}-\d{2}-\d{2}\s*\d{2}-\d{2}-\d{2}", result)
gameName := result1
; 如果没有找到匹配项,则将 gameName 设置为文件名
if (gameName = "") {
gameName := fileName
}
}
; 去掉游戏名称前后的空格
gameName := Trim(gameName)
; 创建游戏名称文件夹
gameDir := gameFolder . "\" . gameName
; 检查并创建目录
if !FileExist(gameDir) {
FileCreateDir, % gameDir ; 创建目录
}
; 移动文件到相应的文件夹
FileMove, % captureFolder "\" fileName, % gameDir "\" fileName, 1
}
; 如果是第一次检查,设置后续检查为3小时
if (isFirstCheck) {
SetTimer, CheckNewFiles, % checkInterval ; 设置后续的检查间隔为3小时
isFirstCheck := false ; 标记为已经不是第一次检查
}
}
还可以吧,GPT还是有点东西的,我自己看文档写少不了折磨的,谁家注释是 ;
啊,Loop, Files, % captureFolder "\*.mp4"
这种写法纯在给我开眼👍
不过ahk貌似不止这点作用,他好像和我前面弄的一键更改音频还能联动起来