在文件或文件夹名称的末尾添加或替换当前日期
Adding or replacing the current date to the end of a file or folder name
希望获得有关 applescript 的帮助,该 applescript 将通过在文件扩展名之前的文件名末尾添加当前日期 (YYYY-MM-DD) 来重命名当前选定的文件或文件夹,或者如果日期存在于文件名,然后将其更新为当前日期。
例如:
图片1.jpeg
至
图 1 2019-04-02.jpeg
我已经从 Applescript New Folder Named By Date 中找到了一些有用的代码
和 https://gist.github.com/mnot/221399
我修改了它们以创建一个主要工作的 applescript。
我唯一不知道的部分是如何检查文件名中是否已经存在日期,然后如何替换它。目前,我的 applescript 只会在每次 运行.
时继续添加日期
不确定这是否会有所不同,但可以安全地假设没有文件以 XXXX-XX-XX(X = 任何数字)结尾。
tell application "Finder"
try
set the source_folder to (folder of the front window) as text
on error -- no open folder windows
display dialog "Please select a file to apply date to" buttons {"Cancel"} default button 1
end try
set these_items to the selection
end tell
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items) as alias
set this_info to info for this_item
set {file_name, file_ext} to splitExtension from the name of this_info
set x to my the_perfect_datestring()
set new_name to file_name & " " & x & "" & file_ext
-- check to see if it's already there
tell application "Finder"
try
set name of this_item to new_name
on error -- no open folder windows
display dialog "Error - File may already exist" buttons {"Cancel"} default button 1
end try
end tell
end repeat
on the_perfect_datestring()
try
set cd to (the current date)
set the_year to year of (cd) as number
set the_month to month of (cd) as number
set the_day to day of (cd) as number
if the_month < 10 then set the_month to "0" & the_month
if the_day < 10 then set the_day to "0" & the_day
return ((the_year & "-" & the_month & "-" & the_day) as text)
on error
return "-ERROR"
end try
end the_perfect_datestring
to splitExtension from file_name
set dot to "."
tell AppleScript
set oT to text item delimiters
set text item delimiters to dot
if (count text items of file_name) > 1 then
set out_name to (text items 1 through -2 of file_name) as string
set ext to last text item of file_name
else
set out_name to file_name
set ext to ""
end if
set text item delimiters to oT
if ext is not "" then set ext to dot & ext
return {out_name, ext}
end tell
end splitExtension
提前致谢
这是另一种方法,它使用 shell 创建时间戳并检查日期是否存在于 Foundation
框架
的 NSRegularExpression
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
-- the pattern searches for 4 digits, one hyphen, 2 digits, one hyphen, 2 digits at the end of the string
property datePattern : "\d{4}-\d{2}-\d{2}$"
tell application "Finder"
try
set the sourceFolder to (folder of the front window) as text
on error -- no open folder windows
display dialog "Please select a file to apply date to" buttons {"Cancel"} default button 1
end try
set theseItems to the selection
end tell
repeat with anItem in theseItems
-- extract file name and file extension
set {name:Nm, name extension:fileExtension} to anItem
-- strip the file extension
set baseName to text 1 thru ((get offset of "." & fileExtension in Nm) - 1) of Nm
-- create the timestamp in format YYYY-MM-DD
set currentDate to do shell script "/bin/date +%Y-%m-%d"
if fileNameHasDate(baseName) then
-- replace the last 11 characters with the new timestamp
set newName to text 1 thru -11 of baseName & currentDate
else
-- append the timestamp to the file name
set newName to baseName & space & currentDate
end if
-- add the file extension if there was one
if fileExtension is not "" then set newName to newName & "." & fileExtension
-- rename the file
tell application "Finder" to set name of contents of anItem to newName
end repeat
-- checks if the date string exists in the filename. Returns boolean true or false
on fileNameHasDate(fileName)
set regex to current application's NSRegularExpression's regularExpressionWithPattern:datePattern options:0 |error|:(missing value)
set numberOfMatches to regex's numberOfMatchesInString:fileName options:0 range:{location:0, |length|:(count fileName)}
return (numberOfMatches as integer) is 1
end fileNameHasDate
旁注:由于涉及 AppleScriptObjC
lowerCamelCased 使用变量名
希望获得有关 applescript 的帮助,该 applescript 将通过在文件扩展名之前的文件名末尾添加当前日期 (YYYY-MM-DD) 来重命名当前选定的文件或文件夹,或者如果日期存在于文件名,然后将其更新为当前日期。
例如:
图片1.jpeg
至
图 1 2019-04-02.jpeg
我已经从 Applescript New Folder Named By Date 中找到了一些有用的代码 和 https://gist.github.com/mnot/221399
我修改了它们以创建一个主要工作的 applescript。 我唯一不知道的部分是如何检查文件名中是否已经存在日期,然后如何替换它。目前,我的 applescript 只会在每次 运行.
时继续添加日期不确定这是否会有所不同,但可以安全地假设没有文件以 XXXX-XX-XX(X = 任何数字)结尾。
tell application "Finder"
try
set the source_folder to (folder of the front window) as text
on error -- no open folder windows
display dialog "Please select a file to apply date to" buttons {"Cancel"} default button 1
end try
set these_items to the selection
end tell
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items) as alias
set this_info to info for this_item
set {file_name, file_ext} to splitExtension from the name of this_info
set x to my the_perfect_datestring()
set new_name to file_name & " " & x & "" & file_ext
-- check to see if it's already there
tell application "Finder"
try
set name of this_item to new_name
on error -- no open folder windows
display dialog "Error - File may already exist" buttons {"Cancel"} default button 1
end try
end tell
end repeat
on the_perfect_datestring()
try
set cd to (the current date)
set the_year to year of (cd) as number
set the_month to month of (cd) as number
set the_day to day of (cd) as number
if the_month < 10 then set the_month to "0" & the_month
if the_day < 10 then set the_day to "0" & the_day
return ((the_year & "-" & the_month & "-" & the_day) as text)
on error
return "-ERROR"
end try
end the_perfect_datestring
to splitExtension from file_name
set dot to "."
tell AppleScript
set oT to text item delimiters
set text item delimiters to dot
if (count text items of file_name) > 1 then
set out_name to (text items 1 through -2 of file_name) as string
set ext to last text item of file_name
else
set out_name to file_name
set ext to ""
end if
set text item delimiters to oT
if ext is not "" then set ext to dot & ext
return {out_name, ext}
end tell
end splitExtension
提前致谢
这是另一种方法,它使用 shell 创建时间戳并检查日期是否存在于 Foundation
框架
NSRegularExpression
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
-- the pattern searches for 4 digits, one hyphen, 2 digits, one hyphen, 2 digits at the end of the string
property datePattern : "\d{4}-\d{2}-\d{2}$"
tell application "Finder"
try
set the sourceFolder to (folder of the front window) as text
on error -- no open folder windows
display dialog "Please select a file to apply date to" buttons {"Cancel"} default button 1
end try
set theseItems to the selection
end tell
repeat with anItem in theseItems
-- extract file name and file extension
set {name:Nm, name extension:fileExtension} to anItem
-- strip the file extension
set baseName to text 1 thru ((get offset of "." & fileExtension in Nm) - 1) of Nm
-- create the timestamp in format YYYY-MM-DD
set currentDate to do shell script "/bin/date +%Y-%m-%d"
if fileNameHasDate(baseName) then
-- replace the last 11 characters with the new timestamp
set newName to text 1 thru -11 of baseName & currentDate
else
-- append the timestamp to the file name
set newName to baseName & space & currentDate
end if
-- add the file extension if there was one
if fileExtension is not "" then set newName to newName & "." & fileExtension
-- rename the file
tell application "Finder" to set name of contents of anItem to newName
end repeat
-- checks if the date string exists in the filename. Returns boolean true or false
on fileNameHasDate(fileName)
set regex to current application's NSRegularExpression's regularExpressionWithPattern:datePattern options:0 |error|:(missing value)
set numberOfMatches to regex's numberOfMatchesInString:fileName options:0 range:{location:0, |length|:(count fileName)}
return (numberOfMatches as integer) is 1
end fileNameHasDate
旁注:由于涉及 AppleScriptObjC
lowerCamelCased 使用变量名