AppleScript名:選択したファイルパスに枝番を追加する |
— Created 2014-12-27 by Takaaki Naganoya — 2014 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aPOSIXpath to POSIX path of (choose file of type {"com.adobe.pdf"} with prompt "PDFを指定してください") set bPath to addStringbeforeExtension(aPOSIXpath, "_1") –> "/Users/me/Desktop/ryuoh01_1.pdf" on addStringbeforeExtension(aPath, extraString) set pathString to current application’s NSString’s stringWithString:aPath set theExtension to pathString’s pathExtension() set thePathNoExt to pathString’s stringByDeletingPathExtension() set newPath to (thePathNoExt’s stringByAppendingString:extraString)’s stringByAppendingPathExtension:theExtension return newPath as string end addStringbeforeExtension |
カテゴリー: File path
OLD StyleASでチルダ入りパス展開
AppleScript名:OLD Style ASでチルダ入りパス展開 |
— Created 2016-05-13 by Christopher Stone
set aPath to "~/Desktop" set aRes to expandTildeInPath(aPath) of me –> "/Users/me/Desktop" on expandTildeInPath(thePath) tell application "System Events" return (POSIX path of (disk item thePath)) end tell end expandTildeInPath |
チルダ入りパス展開
チルダ入りのPOSIX pathをCocoaの機能を用いてフルパスに展開するAppleScriptです。
AppleScript名:チルダ入りパス展開 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set bPath to "~/Desktop" set pathString to current application’s NSString’s stringWithString:bPath set newPath to pathString’s stringByExpandingTildeInPath() as string –> "/Users/me/Desktop" |
フルパスからファイル名を取得する
フルパスからファイル名を取得するAppleScriptです。
AppleScriptでは、ファイルパス形式をいくつか併用しています。HFS形式、URL形式、POSIX形式などです。
▲2019/7/20変更。POSIX pathからaliasに直接変換できるような誤解を招く表現があったので、いったんPOSIX file(=file)を経由しないとaliasに変換できないことを表現
▲2022/6/3変更。NSURL(file://)から直接「as alias」で変換できることが判明。この変換を追記
ここではPOSIX形式のパスからファイル名を、Cocoaの機能を用いて求めるScriptを掲載しています。
AppleScript名:フルパスからファイル名を取得する |
— Created 2017-02-04 10:38:44 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aPath to "/Users/me/Documents/ぴよまるソフトウェア/–Book1「AppleScript最新リファレンス」/9999_images/E81F91B7-4931-463F-A027-21A18A853290.jpg" set aStr to (current application’s NSString’s stringWithString:aPath)’s lastPathComponent() as string –> "E81F91B7-4931-463F-A027-21A18A853290.jpg" |
古典的なAppleScriptのやり方だと、aliasからアプリケーションの機能を用いてファイル名を取得することになります。
AppleScript名:aliasからファイル名を取得(Finder) |
set aFile to choose file
tell application "Finder" set aName to name of aFile end tell |
AppleScript名:aliasからファイル名を取得(System Events) |
set aFile to choose file
tell application "System Events" set aName to name of aFile end tell |
フルパスからファイル名を取得して拡張子を削除する
AppleScript名:フルパスからファイル名を取得して拡張子を削除する |
— Created 2017-02-04 10:38:44 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aPath to "/Users/me/Documents/ぴよまるソフトウェア/–Book1「AppleScript最新リファレンス」/9999_images/E81F91B7-4931-463F-A027-21A18A853290.jpg" set aStr to (current application’s NSString’s stringWithString:aPath)’s lastPathComponent()’s stringByDeletingPathExtension() as string –> "E81F91B7-4931-463F-A027-21A18A853290.jpg" |
ファイルパスの変換(Alias→POSIX path→NSURL→POSIX path→file→Alias)
AppleScriptで使用するファイルパスには、alias(hfs形式)、file(hfs形式)、POSIX path形式(shell commandとのやりとりに使う)、URL形式(ほとんど使わないがごくまれに)などがありますが、macOS 10.10以降はCocoaのオブジェクトを扱えるようになったので、Cocoaオブジェクトとの間でも変換する必要が出てきました。
CocoaもPath形式にPOSIX path(NSString)、URL(NSURL)という複数のパス表現形式があり、AppleScript側のファイルパス情報と相互変換する必要があります。相互変換が一発でできれば楽ですが、たとえばaliasならalias→POSIX path→CocoaのNSStringのpathと2段階で変換する必要があります。
難しいかといわれれば、別に慣れればそんなもんでしょう。技術的な難易度はそれほど高くありません。こうした全体像を知っているかどうか、ということがキーです。
AppleScript名:ファイルパスの変換(Alias→POSIX path→NSURL→POSIX path→file→Alias) |
— Created 2016-02-19 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Get Alias (AppleScript native file path format) set anAlias to choose file –> alias "Macintosh HD:Users:me:Documents:……" –Get POSIX path from Alias set aPOSIX to POSIX path of anAlias –> "/Users/me/Documents/……" –Get NSURL from POSIX path set aURL to current application’s |NSURL|’s fileURLWithPath:aPOSIX –> (NSURL) file:///Users/me/Documents/………%83%88%EF%BC%92.scptd/ –Get NSURL string set bPath to aURL’s absoluteString() –> (NSString) "file:///Users/me/Documents/A….9C%EF%BC%89.scptd/" –Get file path (POSIX path) NSString set cPath to aURL’s |path|() –> (NSString) "/Users/me/Documents/……scptd" –Get POSIX file path string from NSString set dPath to cPath as string –> "/Users/me/Documents/……..scptd" –Get file from POSIX path set aFile to POSIX file dPath –> file "Macintosh HD:Users:me:Documents:….scptd" –Get Alias from file set bAlias to aFile as alias –> alias "Macintosh HD:Users:me:Documents:….scptd" |
POSIX –> URL –> POSIX
AppleScript名:POSIX –> URL –> POSIX |
— Created 2017-03-02 23:41:25 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aPOSIX to POSIX path of (choose file) –POSIX set aURL to current application’s |NSURL|’s fileURLWithPath:aPOSIX –URL set bPath to aURL’s |path|() as string –POSIX |
file URL String to alias
AppleScript名:file URL String to alias |
— Created 2017-09-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" property |NSURL| : a reference to current application’s |NSURL| set aFile to choose file set aPOSIX to POSIX path of aFile set aFileURL to (|NSURL|’s fileURLWithPath:aPOSIX)’s absoluteString() as string –Target (file URL string) –> "file:///Users/maro/Documents/…. set aPath to ((|NSURL|’s URLWithString:aFileURL)’s |path|()) as string set bPath to (POSIX file aPath) as alias –> alias "Cherry:Users:maro:Documents/… |
相対パスから絶対パスを計算してを求める v2
AppleScript名:相対パスから絶対パスを計算してを求める v2 |
— Created 2017-11-11 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" set absolutePath to "/Users/me/Documents/–Book 1「AppleScript最新リファレンス」/5000 iOSデバイスとの連携/5100 iOSデバイスからMacに画面を出力するAirServer.md" set relativePath to "../9999_images/img-1.jpg" set relativePath to calcAbsolutePath(absolutePath, relativePath) of me –> "/Users/me/Documents/–Book 1「AppleScript最新リファレンス」/9999_images/img-1.jpg" on calcAbsolutePath(aAbsolutePOSIXfile, bRelativePOSIXfile) set aStr to current application’s NSString’s stringWithString:aAbsolutePOSIXfile set bStr to current application’s NSString’s stringWithString:bRelativePOSIXfile set aList to aStr’s pathComponents() as list set bList to bStr’s pathComponents() as list set aLen to length of aList set aCount to 1 repeat with i in bList set j to contents of i if j is not equal to ".." then exit repeat end if set aCount to aCount + 1 end repeat set tmp1List to items 1 thru (aLen – aCount) of aList set tmp2List to items aCount thru -1 of bList set allRes to current application’s NSString’s pathWithComponents:(tmp1List & tmp2List) return allRes as text end calcAbsolutePath |
2つのパスの相対パスを求める v3
AppleScript名:2つのパスの相対パスを求める v3 |
— Created 2017-01-28 by Takaaki Naganoya — Modified 2017-01-30 by Shane Stanley — Modified 2017-02-03 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" –Markdown書類(フルパス) set aFile to "/Users/me/Documents/ぴよまるソフトウェア/書籍原稿/–Book 1a「AppleScript最新リファレンス バージョン2.7対応」/5000 iOSデバイスとの連携/5100 iOSデバイスからMacに画面を出力するAirServer.md" –リンク画像(フルパス) set bFile to "/Users/me/Documents/ぴよまるソフトウェア/書籍原稿/–Book 1a「AppleScript最新リファレンス バージョン2.7対応」/9999_images/img-1.php.jpeg" set relativePath to calcRelativePath(aFile, bFile) of me –> "../9999_images/img-1.php.jpeg" on calcRelativePath(aPOSIXfile, bPOSIXfile) set aStr to current application’s NSString’s stringWithString:aPOSIXfile set bStr to current application’s NSString’s stringWithString:bPOSIXfile set aList to aStr’s pathComponents() as list set bList to bStr’s pathComponents() as list set aLen to length of aList set bLen to length of bList if aLen ≥ bLen then copy aLen to aMax else copy bLen to aMax end if repeat with i from 1 to aMax set aTmp to contents of item i of aList set bTmp to contents of item i of bList if aTmp is not equal to bTmp then exit repeat end if end repeat set bbList to items i thru -1 of bList set aaItem to (length of aList) – i set tmpStr to {} repeat with ii from 1 to aaItem set the end of tmpStr to ".." end repeat set allRes to current application’s NSString’s pathWithComponents:(tmpStr & bbList) return allRes as text end calcRelativePath |