【Mac】AppleScriptおよびExcelVBAでダウンロードフォルダの一番新しいファイル名を変更する方法

2014年3月25日火曜日

mac tips vba

t f B! P L

Th 02 VBA AppleScript

【Mac】ExcelVBAでダウンロードフォルダの中のファイルから一番新しいファイルのパスを取得する方法。に引き続き誰の役に立つのかわからないシリーズ。

自分用メモとして記載しておきます。

AppleScript

tell application "Finder"
    set myfiles to a reference to (sort (get files of (path to downloads folder)) by creation date)
    set myfile to end of myfiles
    set ext to name extension of myfile
    set newNameNoExt to "変更後ファイル名_拡張子なし" as Unicode text
    set newName to newNameNoExt & "." & ext as Unicode text
    set newPathFileNAme to (path to downloads folder) & newName as Unicode text
    set cnt to 1
    repeat with tmpFile in myfiles
        if newPathFileNAme = (tmpFile as Unicode text) then
            set newName to newNameNoExt & " _" & cnt & "." & ext as Unicode text
            set newPathFileNAme to (path to downloads folder) & newName as Unicode text
            set cnt to cnt + 1
        end if
    end repeat
    set name of myfile to newName
    return newPathFileNAme
end tell
もうちょっとキレイなコードで書ける気がするのですが、今の僕にはこれで精一杯。

説明付き

説明付きで記載します。実際には説明部分は不要なので、上記のコードをコピーしてください。

-- Finderで処理します。
tell application "Finder"
    -- これでダウンロードフォルダの中のファイルを取得して更新日付の古いやつを頭にしてmyfilesにいれます。
    set myfiles to a reference to (sort (get files of (path to downloads folder)) by creation date)
    -- myfilesの中から一番最後(一番新しい)ファイルを抜き出します。
    set myfile to end of myfiles
    -- myfileの拡張子を抜き出します。
    set ext to name extension of myfile
    -- 変更後のファイル名を拡張子なしで指定します。
    set newNameNoExt to "変更後ファイル名_拡張子なし" as Unicode text
    -- 変更後のファイル名を拡張子つきで指定します。
    set newName to newNameNoExt & "." & ext as Unicode text
    -- ファイルパス付きで新しいファイルを指定します。
    set newPathFileNAme to (path to downloads folder) & newName as Unicode text
    -- すでに新しいファイル名と同じファイルがあった時ようにカウントアップします。
    set cnt to 1
    -- ダウンロードフォルダになるファイル全て処理します。
    repeat with tmpFile in myfiles
        -- 新しいファイル名と同一のファイル名がある場合には、ファイル名の最後にカウントをつけます。
        if newPathFileNAme = (tmpFile as Unicode text) then
            -- カウントをつけたファイル名を定義します。
            set newName to newNameNoExt & " _" & cnt & "." & ext as Unicode text
            -- カウントをつけたファイルのパスつきで定義します。
            set newPathFileNAme to (path to downloads folder) & newName as Unicode text
            set cnt to cnt + 1
        end if
    end repeat
    -- ファイル名を書き換えます。
    set name of myfile to newName
    -- 新しいファイル名をパスつきで返します。
    return newPathFileNAme
end tell


VBA用

VBAからMacScript呼び出すときには、ダブルコーテーションの付け方が面倒なので、念のため。
新しいファイル名には、処理中で指定する、FnameとMyDateで指定していますが、ご自身のコードにあわせて変えてください。


' ダウンロードしたファイルのパスを取得する。

' ファイル名も同時に変更してしまう。

s = "tell application ""Finder""" & vbCrLf & _

    "set myfiles to a reference to (sort (get files of (path to downloads folder)) by creation date)" & vbCrLf & _

    "set myfile to end of myfiles" & vbCrLf & _

    "set ext to name extension of myfile" & vbCrLf & _

    "set newNameNoExt to """ & Fname & "_" & MyDate & """ as Unicode text" & vbCrLf & _

    "set newName to newNameNoExt & " & """.""" & " & ext as Unicode text" & vbCrLf & _

    "set newPathFileNAme to (path to downloads folder) & newName as Unicode text" & vbCrLf & _

    "set cnt to 1" & vbCrLf & _

    "repeat with tmpFile in myfiles" & vbCrLf & _

        "if newPathFileNAme = (tmpFile as Unicode text) then" & vbCrLf & _

            "set newName to newNameNoExt &" & """ _""" & " & cnt & " & """.""" & " & ext as Unicode text" & vbCrLf & _

            "set newPathFileNAme to (path to downloads folder) & newName as Unicode text" & vbCrLf & _

            "set cnt to cnt + 1" & vbCrLf & _

        "end if" & vbCrLf & _

    "end repeat" & vbCrLf & _

    "set name of myfile to newName" & vbCrLf & _

    "return newPathFileNAme" & vbCrLf & _

"end tell"

    

'Debug.Print s



str = MacScript(s)


最後に

わかってしまえば、まぁそれでいけるよな、と思うのですが、なかなかAppleScriptのお作法になれることが出来ずに簡単なことができないです。

たぶん、もう少し簡単なコードで同じこと実現できる気がするのですが。。。

以上です。

過去の記事

ラベル

アプリ (545) iPhone (485) mac (244) 買い物 (89) 番外 (87) ブログ (74) 書評 (68) 写真 (64) Blogger (63) 仕事 (55) webサービス (51) 生活 (50) todo (38) tips (36) rss (33) DVD (24) DraftPad (23) music (19) 外食 (14) 機種変更 (14) メール (13) ニュース (12) お出かけ (11) まとめ (11) アクセス解析 (11) HTML (9) ドラマ (8) vba (7) 絵本 (7) Excel (6) Textwell (6) web (4) libreoffice (3) twitter (3) 勉強 (3) basic (2) 素材 (2)

ブログを検索

QooQ