Here is another AppleScript version of a
prior vba script. This one creates a back of the current
workbook. It copies the last saved version of the current workbook to
a Backup
subdirectory below the directory in which that file was saved.
It adds a counter (ie, .001
) before the .xls(x)
extension.
-- Save a backup of the current file
-- Copyright under GPL by Mark Grimes
-- Saving with '\scs' in the filename creates Shortcut: Crtl+Shift+S
tell application "Microsoft Excel"
set macPath to get full name of (get properties of active workbook)
set curPath to my posix_path(macPath)
set cmdStatus to do shell script ¬
"perl -MFile::Copy -MFile::Basename -MFile::Spec -e' " & ¬
"$f=qq{" & curPath & "}; " & ¬
"$d = File::Spec->catdir(dirname($f),q{Backup});" & ¬
"mkdir $d unless -d $d;" & ¬
"$b = File::Spec->catfile($d,basename($f)); " & ¬
"$i=1;" & ¬
"do {$s = sprintf( qq{%03d}, $i++); $b=~s/(?:.\\d{3})?.(xlsx?)$/.$s.$1/; }" & ¬
" while( -e $b );" & ¬
"copy $f, $b or die qq{Error copying $f to $b: $!};" & ¬
"print qq{Backed up last saved version to: $b};" & ¬
" ' "
display dialog cmdStatus
end tell
-- From: http://www.macosxhints.com/article.php?story=20011030193449870
-- Thanks!
on posix_path(mac_path)
set mac_path to (mac_path as text)
set root to (offset of ":" in mac_path)
set rootdisk to (characters 1 thru (root - 1) of mac_path)
tell application "Finder"
if (disk (rootdisk as string) is the startup disk) then
set unixpath to "/" & (characters (root + 1) thru end of mac_path)
else
set unixpath to "/Volumes:" & mac_path
end if
end tell
set chars to every character of unixpath
repeat with i from 2 to length of chars
if item i of chars as text is equal to "/" then
set item i of chars to ":"
else if item i of chars as text is equal to ":" then
set item i of chars to "/"
else if item i of chars as text is equal to "'" then
set item i of chars to "\\'"
else if item i of chars as text is equal to "\"" then
set item i of chars to "\\" & "\""
else if item i of chars as text is equal to "*" then
set item i of chars to "\\*"
else if item i of chars as text is equal to "?" then
set item i of chars to "\\?"
else if item i of chars as text is equal to " " then
set item i of chars to "\\ "
else if item i of chars as text is equal to "\\" then
set item i of chars to "\\\\"
end if
end repeat
return every item of chars as string
end posix_path
The contents of this blog are licensed under the Creative Commons “Attribution-Noncommercial-Share Alike 3.0″ license.