我正在尝试使用Autohotkey / RegEx重命名文件(通常是下载的字幕)以丢弃不必要的字符,将“。”删除到空格,使最终重命名的文件只包含名称和四位数年份。示例如下
D:\ Folder \ Sub Folder \ Hamburger.Hill.1987.BluRay.720p.x264.srt
D:\ Folder \ Sub Folder \ Hamburger Hill 1987.srt
最初我的目的只是删除“。”。通过“Ro Yo Mi”的贡献,AHK代码能够将“。”移除到空格(Current Code Part 1)并且它回答了我的初始问题。
后来我意识到也有可能删除不必要的字符(仅保留名称,年份和原始文件扩展名)。 Ro Yo Mi“还试图添加新的代码行来重命名文件名中不必要的字符串(Current Code Part 2)。虽然代码显然能够重命名(显示在消息代码中)但最终无法实际重命名。可能需要进行一些进一步的升级或更改才能使其按预期完成工作。代码的当前状态可以在给定的参考中找到。
答案 0 :(得分:0)
文件未重命名的问题是因为未提供路径。因此,AutoHotKey假定它的当前工作目录是发生更改的位置。由于文件实际上不在AutoHotKey的脚本目录中,因此FileMove
命令失败。
此脚本假定您将提供完整路径和文件名。因此,通过此信息,我将删除字符并使用AutoHotKey重命名文件。
#.:: ; Replace all "." (except before extension) with spaces
OldCLip := ClipboardAll
Clipboard=
Send ^c
ClipWait, 1
; MsgBox % Clipboard ; for testing
if ( Clipboard ) {
; set the value
String := Clipboard
; String := "D:\Folder\Sub Folder\the.Hamburger.Hill.1987.BluRay.720p.x264.srt"
; split string into the desired components: path, filename upto and including year, and extension
RegexMatch(String, "^(.*\\)(.*?[0-9]{4}).*([.][^.]{3})", SubPart)
FullPath := SubPart1
Filename := RegexReplace(SubPart2, "\.", " ") ; replace dots in the file name with spaces to improve readablity
Filename := RegexReplace(Filename, "i)^the\s+", "") ; remove the `the` and trailing spaces from the beginning of the filename if it exists.
Extension := SubPart3
NewPathFilename := FullPath . Filename . Extension
strMessage := "Renaming '" . String . "' to '" . NewPathFilename . "'"
MsgBox, % strMessage
FileMove, % String, % NewPathFilename
} ; end if
Clipboard := OldClip
return
示例消息框
将'D:\ Folder \ Sub Folder \ the.Hamburger.Hill.1987.BluRay.720p.x264.srt'重命名为'D:\ Folder \ Sub Folder \ Hamburger Hill 1987.srt'