重命名文件,使用Autohotkey从文件名中删除不必要的字符

时间:2016-05-07 13:20:06

标签: regex autohotkey

我正在尝试使用Autohotkey / RegEx重命名文件(通常是下载的字幕)以丢弃不必要的字符,将“。”删除到空格,使最终重命名的文件只包含名称和四位数年份。示例如下

  1. 原始文件名/路径
  2.   

    D:\ Folder \ Sub Folder \ Hamburger.Hill.1987.BluRay.720p.x264.srt

    1. 重命名的文件应该是这样的
    2.   

      D:\ Folder \ Sub Folder \ Hamburger Hill 1987.srt

      最初我的目的只是删除“。”。通过“Ro Yo Mi”的贡献,AHK代码能够将“。”移除到空格(Current Code Part 1)并且它回答了我的初始问题。

      后来我意识到也有可能删除不必要的字符(仅保留名称,年份和原始文件扩展名)。 Ro Yo Mi“还试图添加新的代码行来重命名文件名中不必要的字符串(Current Code Part 2)。虽然代码显然能够重命名(显示在消息代码中)但最终无法实际重命名。可能需要进行一些进一步的升级或更改才能使其按预期完成工作。代码的当前状态可以在给定的参考中找到。

1 个答案:

答案 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'