分享一个简单的自动替换剪贴板文本的 AHK 脚本

之前一直有批量重命名网盘上文件的需求。本地文件批量重命名可用的工具不少,可网盘上好像就只能手动了。

之前一直想找个现成的工具。我现在用的剪贴板管理工具是 CopyQ,找了一下好像没发现自动编辑的功能 (说 CopyQ 的设置项有点不够集中直观)。想起之前用过的 ClipboardFusion 好像支持简单的自动编辑,但打开程序后发现那是 Pro 版功能 (要是 ClipboardFusion 也上架 Steam 我就买了)。没找到现成的工具就打开 vs code 和 AutoHotKey 的文档自己琢磨着写了【 菜鸡警告 :warning:

因为我用的是 115 网盘它在给文件重命名后,文件会按新名称自动变更位置,所以没加移动鼠标的内容。其他网盘可能需要自己加一下自动移动鼠标位置,以及计数并自动点下一页。

这个脚本,在按下 Win+c 后,在 115 网盘电脑版上的实际进行的动作流程是:

  • (鼠标移动到文件的“重命名”按钮上,并按下 win+c键后)点击“重命名”按钮;
  • 模拟按下 Ctrl+c 复制当前文件名 (115 中点重命名后文件名处于被选中状态);
  • AHK 将复制的文本全部转换大写,再移除其中所有匹配 \[[^\]]*\] 的内容;
  • 模拟按下 Ctrl+v 将编辑后的内容粘贴进重命名框;
  • 模拟按下回车键确认修改文件名
  • 重复以上动作若干遍

其中的 Sleep 即步骤间的延迟我放得偏大,不改也行。出现问题的话可以再放大一点。要是重命名中间出现修改后的名字与已有文件名相同无法修改的提示时循环无法进行下去,就得退出脚本手动编辑这项了。

按下 Win+t 后是自动编辑选中的文本一次。等于 Win+c 的去循环版。

#c::
    Loop, 40 ; 循环的次数
    {
        Click
        Sleep, 140 ; 步骤间要等一下网盘软件响应
        Send, ^c
        newClip := Clipboard
        StringUpper, newClip, newClip
        newClip := RegExReplace(newClip,"\[[^\]]*\]") 
        ; 上一行引号内为被替换的正则表达式,目前为直接去除。
        Clipboard := newClip
        Send, ^v
        Sleep, 150
        Send, {Enter}
        newClip := ""
        Sleep, 500
    }
    
return

#t::
    Send, ^c
    newClip := Clipboard
    StringUpper, newClip, newClip
    newClip := RegExReplace(newClip,"\[[^\]]*\]")
    Clipboard := newClip
    Send, ^v
    newClip := ""
  
return

如果要自动替换正则表达式匹配的文本的话,就自己看一眼 RegExReplace() 的文档吧,或者简单地,把那一行修改为

        newClip := RegExReplace(newClip,"被替换的正则表达式", Replacement := "要替换的文本")