-2

(これは、-3 票を獲得した私の以前の質問からの新しい編集です。この新しい質問がより良い資格を持っていることを願っています)

大量のファイルをフォルダーに整理するAutomator サービスを作成する必要があります。イラストレーターを使って作業し、各.aiファイルからさらに 3 つの形式を作成します: [ name.pdf ]、[ name BAJA.jpg ]、[ name.jpg ]、合計 4 つのファイル

私の問題は、1 週間の間に 90 以上の異なる .ai ファイルに対してこのプロセスを繰り返すことです。したがって、90 個のファイル * 4 は360 個の独立したファイルであり、すべていくつかのプロジェクト フォルダーに格納されます。

関連する 4 つのファイルをすべて 1 つのフォルダーにまとめ、フォルダー名を .ai ファイルと同じに設定したいと考えています。

すべてのファイル名が (1 つを除いて) 同一であるため、同じ名前のすべてのファイルを取得し、名前をコピーしてフォルダーを作成し、このファイルをその中に入れるようにファインダーに指示することを考えましたが、ファイル名のバリエーション [名前] があります。 LOW.jpg] 例外として動作するものを削除するようにスクリプトに指示できるかもしれません。

そうすれば、4 つのファイルすべてが 1 つのフォルダーに統合されます。前もって感謝します


更新:この問題はもともと 2013 年に投稿されたもので、現在は解決策があります。このスクリプトを自分のニーズに合わせて組み立てるのを手伝ってくれる人がいます。

これをサービスとして追加し、MacO でキーボード ショートカットを割り当てました。これはコードです:

on run {input, parameters} -- create folders from file names and move

    set output to {} -- this will be a list of the moved files

    repeat with anItem in the input -- step through each item in the input
        set {theContainer, theName, theExtension} to (getTheNames from anItem)
        try

            # check for a suffix and strip it off for the folder name
            if theName ends with " BAJA" then
                set destination to (makeNewFolder for (text 1 thru -6 of theName) at theContainer)
            else
                set destination to (makeNewFolder for theName at theContainer)
            end if

            tell application "Finder"
                move anItem to destination
                set the end of the output to the result as alias -- success
            end tell
        on error errorMessage -- duplicate name, permissions, etc
            log errorMessage
            # handle errors if desired - just skip for now
        end try
    end repeat

    return the output -- pass on the results to following actions
end run


to getTheNames from someItem -- get a container, name, and extension from a file item
    tell application "System Events" to tell disk item (someItem as text)
        set theContainer to the path of the container
        set {theName, theExtension} to {name, name extension}
    end tell
    if theExtension is not "" then
        set theName to text 1 thru -((count theExtension) + 2) of theName -- just the name part
        set theExtension to "." & theExtension
    end if
    return {theContainer, theName, theExtension}
end getTheNames


to makeNewFolder for theChild at theParent -- make a new child folder at the parent location if it doesn't already exist
    set theParent to theParent as text
    if theParent begins with "/" then set theParent to theParent as POSIX file as text
    try
        return (theParent & theChild) as alias
    on error errorMessage -- no folder
        log errorMessage
        tell application "Finder" to make new folder at theParent with properties {name:theChild}
        return the result as alias
    end try
end makeNewFolder

お役に立てれば。

4

2 に答える 2

1

個人的には、この種の質問に答えることを楽しんでいるので、あなたが反対票を投じてしまうのは残念です.

ソリューションを投稿していただきありがとうございます。これは素晴らしいジェスチャーだと思います。

このスクリプトは、"Finder" の代わりに "System Events" を使用するよりも少し短く、多数のファイルに対してより高速になります。

    set IllustratorOutputFolder to "/Users/CK/Desktop/example"

    tell application "System Events" to ¬
        set ai_files to every file in folder IllustratorOutputFolder ¬
            whose name extension is "ai"

    set Output to {}

    repeat with ai_file in ai_files
        set AppleScript's text item delimiters to "."

        get name of ai_file
        get text items of result

        set basename to reverse of rest of reverse of result as text

        tell application "System Events"
            get (every file in folder IllustratorOutputFolder ¬
                whose name begins with basename)

            move result to (make new folder ¬
                in folder IllustratorOutputFolder ¬
                with properties {name:basename})
        end tell

        set end of Output to result
    end repeat

    return Output -- list of lists of moved files

物事を行うための単なる代替方法。良い悪いではなく、解決策が違うだけです。

于 2017-12-26T00:59:18.417 に答える