问题
I'm trying to rename files (usually downloaded subtitle) using Autohotkey/RegEx to discard the unnecessary character, remove “.” to space in a way that the final renamed file will contain only name and the four digit year. An example as follows
- Original file name/path
D:\Folder\Sub Folder\Hamburger.Hill.1987.BluRay.720p.x264.srt
- Renamed file should be like this
D:\Folder\Sub Folder\Hamburger Hill 1987.srt
Initially I was intended only to remove the “.”. With contribution of “Ro Yo Mi” the AHK code is able to remove the “.” to space (Current Code Part 1) and it answered my initial question.
Later I realized there might possibility to also remove the unnecessary character (only to keep the name, year and also original file extension). Ro Yo Mi” also attempted with added new lines of code to rename the unnecessary string from the file name (Current Code Part 2). Although the code apparently showing capable to rename (show in the message code) but finally could not rename actually. There might some further upgrade or changes needed to make it operational to do the job as intended. Current status of the code could be found in the given reference.
回答1:
Description
The problem the file wasn't getting renamed is because the path was not provided. Therefore AutoHotKey assumes that it's current working directory is where the changes will occur. Since the files aren't actually in the AutoHotKey's script directory, then the FileMove
command fails.
This script assumes you'll be providing the fullpath and filename. So with this information this is how I'd remove the characters and rename the file using 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
Sample Message Box
Renaming 'D:\Folder\Sub Folder\the.Hamburger.Hill.1987.BluRay.720p.x264.srt' to 'D:\Folder\Sub Folder\Hamburger Hill 1987.srt'
来源:https://stackoverflow.com/questions/37089063/rename-file-remove-unnecessary-character-from-file-name-using-autohotkey