1

ジョブ名を要求するapplescriptを作成しようとしています。次に、ジョブ名でフォルダーを作成するための目的のディレクトリを作成しようとしています。次に、最初のフォルダー内に、「ジョブ名-リンク」や「ジョブ名-PDF」などの名前の一連のサブフォルダーを作成する必要があります。

私はこのスクリプトをさまざまな情報源からまとめましたが、それを改善する方法についてフィードバックを求めています。

tell application "Finder"
activate

set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
set folderpath to POSIX path of (choose folder with prompt "Select client folder")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Links")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-PDFs")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Supplied")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Versions")

end tell

ご意見やご感想をお待ちしております。これはスクリプトでの私の最初の試みです。この特定のユースケースを何年にもわたって探してきたので、これを投稿しようと思いましたが、ほんの少ししか見つかりませんでした。他の人も役に立つと思うので、誰かが私を助けてくれることを願っています。

4

7 に答える 7

0

jackjr300 スクリプトのバリアントを使用して、Web サイト フォルダー テンプレートを生成しています。

do shell script "mkdir -p " & (quoted form of (folderpath & jName & "/")) & "{\"codey\",\"js\",\"fonts\",\"images\"}"

さらに、サブフォルダーを生成し、フォルダーの複製アクションを使用して既存のフレームワークとスクリプトを使用してサブフォルダーを作成するために、別の実行を行います。

とても便利です ありがとう...!

于 2014-08-10T10:44:13.053 に答える
0

mkdirは階層を作成できます。これらの名前を {} に入れるだけです。例:'/destFolderPath/jobName/prefix'{"suffix1","suffix2","suffix3","suffix4"}

これがスクリプトです。

set jName to my getJobNum()
set folderpath to POSIX path of (choose folder with prompt "Select client folder")
do shell script "mkdir -p " & (quoted form of (folderpath & jName & "/" & jName)) & "{\"-Links\",\"-PDFs\",\"-Supplied\",\"-Versions\"}"

on getJobNum()
    activate
    text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
    tell the result to if it is not "" then return it
    getJobNum() -- else text returned is empty
end getJobNum

重要なのは、名前にスラッシュを含める予定がある場合は、それらをコロン文字に置き換える必要があります。スクリプトにハンドラーを追加してそれらを置き換えるのは簡単です。そうしないと、他のサブフォルダーが作成されます。

于 2012-06-27T18:24:33.057 に答える
0

私はスクリプターではありませんが、同じ種類の構造化フォルダー ソリューションを探していました。これらの他の例を検討した後、デザイナー グループのプロジェクト フォルダーをセットアップするための、わずかに変更されたバージョンを思いつきました。

set TID to AppleScript's text item delimiters

-- Ensure the answer is formatted properly
repeat
    try
        set theAnswer to text returned of (display dialog "Please create a job folder, with the name in this format:" default answer "JobNumber-JobCode-ClientDescription")
        set AppleScript's text item delimiters to "-"
        set {jobNum, JobCod, CliDes} to {text item 1 of theAnswer, text item 2 of theAnswer, text item 3 of theAnswer}
        exit repeat
    on error
        display dialog "Please enter your job details in this format [JobNumber]-[JobCode]-[ClientDescription]" buttons {"Cancel", "Try again"} default button "Try again"
    end try
end repeat

set folderpath to POSIX path of (choose folder with prompt "Where to create your project folder?")

set folderNames to {"Links", "Client_input", "SourceBuilds", "Review-Proofs"}
repeat with aName in folderNames
    do shell script "mkdir -p " & quoted form of (folderpath & jobNum & "-" & JobCod & "-" & CliDes & "/" & aName as text)
end repeat

set AppleScript's text item delimiters to TID
于 2013-03-28T11:13:53.683 に答える
0

もう 1 つのアイデアは、目的のフォルダー構造のテンプレートをどこかに作成し、スクリプトにクライアント プレフィックスを付けてその構造をコピーさせることです。この方法のいくつかの利点は、フォルダーがテンプレートに追加された場合にスクリプトを変更する必要がないことです (ハンドラーは既存の構造にも追加されます)。または大きい) 構造。

property template : "/path/to/template/folder" -- the folder structure to copy from


on run -- example
    set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
    set folderPath to (choose folder with prompt "Select a location for the client folder")
    tell application "Finder" to try
        set clientFolder to (make new folder at folderPath with properties {name:jobNum})
    on error number -48 -- folder already exists
        set clientFolder to (folderPath as text) & jobNum
    end try
    copyFolderStructure_toFolder_withPrefix_(template, clientFolder, jobNum)
end run


to copyFolderStructure_toFolder_withPrefix_(source, destination, additions) -- copy folder structure using mkdir
    set {source, destination} to {source as text, destination as text}
    if source begins with "/" then set source to POSIX file source
    if destination begins with "/" then set destination to POSIX file destination
    set {source, destination} to {source as alias, destination as alias}

    set additions to additions as text
    tell application "Finder" to set theFolders to (folders of entire contents of source) as alias list
    set folderNames to ""

    repeat with someFolder in theFolders -- set up the folder names parameter for the shell script
        set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, ":"}
        set namePieces to text items of (text ((count (source as text)) + 1) thru -2 of (someFolder as text))
        set AppleScript's text item delimiters to ("/" & additions)
        set namePieces to space & quoted form of (additions & (namePieces as text))
        set AppleScript's text item delimiters to tempTID
        set folderNames to folderNames & namePieces
    end repeat
    do shell script "cd " & quoted form of POSIX path of destination & "; mkdir -p" & folderNames
end copyFolderStructure_toFolder_withPrefix_
于 2012-06-27T16:02:04.007 に答える
0

スクリプトを改善するために最初にできることは、シェル スクリプトを使用しないことです。シェル スクリプトは削岩機のようなものですが、実行していることは非常に小さなハンドヘルド ハンマーだけで済みます。

元のスクリプトは次のとおりです。

tell application "Finder"
activate
set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
set folderpath to POSIX path of (choose folder with prompt "Select client folder")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Links")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-PDFs")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Supplied")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Versions")
end tell

読み取り、書き込み、および保守が容易な「de-shelled」バージョンと比較してください。

tell application "Finder"
    activate
    set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
    set theClientFolder to (choose folder with prompt "Select client folder")
    set theSubFolderNames to {"Links", "PDFs", "Supplied", "Versions"}
    repeat with theSubFolderName in theSubFolderNames
        make new folder at theClientFolder with properties {name:jobNum & "-" & theSubFolderName}
    end repeat
end tell

変数「folderpath」が「theClientFolder」に変更されていることに注意してください。choose folder はパスを返さず、選択したフォルダーのエイリアス オブジェクトを返すためです。Finder に新しいフォルダーを作成させるコマンドは、「[フォルダーを作成するエイリアス] に新しいフォルダーを作成する」なので、エイリアスをパスに変換してその中に新しいフォルダーを作成する必要はありません。

また、フォルダーの名前がリスト内の変数として宣言されていることにも注意してください。これにより、後で読みやすく、または変更しやすくなります。AppleScript を知らない人でも、このスクリプトを開いて、「PDFs」フォルダの名前を「Documents」などに変更できます。

私が提案できるもう 1 つの改善点は、ユーザーからの入力をもう少し洗練された方法で収集することです。クライアント フォルダ以外の 2 つの情報 (ジョブ番号とジョブの説明) を要求しているように見えるので、2 つのダイアログ ボックスを使用してください。入力してもらいます。これらのダイアログの外観をいくつかの方法で改善することもできます。また、エラー処理を少し追加することもできます。表示しているダイアログをユーザーがキャンセルすると、エラーが生成されます。ユーザーが「OK」をクリックしたかどうかを確認することで、それらを適切に処理できます。

ユーザー入力が少しクリーンアップされたバージョンのスクリプトを次に示します。

tell application "Finder"
    activate
    display dialog "Enter a job number:" default answer "100" buttons {"Cancel", "OK"} default button "OK" with title (the name as text) with icon note giving up after 180
    if the button returned of the result is equal to "OK" then
        set theJobNumber to the text returned of the result
        display dialog "Enter a job description:" default answer "Photos" buttons {"Cancel", "OK"} default button "OK" with title (the name as text) with icon note giving up after 180
        if the button returned of the result is equal to "OK" then
            set theJobDescription to the text returned of the result
            try
                choose folder with prompt "Select client folder:" default location (the path to the desktop folder as alias) without multiple selections allowed, invisibles and showing package contents
                set theClientFolder to the result
            on error
                set theClientFolder to ""
            end try
            if theClientFolder is not equal to "" then
                set theSubFolderNames to {"Links", "PDFs", "Supplied", "Versions"}
                repeat with theSubFolderName in theSubFolderNames
                    make new folder at theClientFolder with properties {name:theJobNumber & "-" & theJobDescription & "-" & theSubFolderName}
                end repeat
            end if
        end if
    end if
end tell

これにより、上部に「Finder」と表示され、Finder アイコンを含むダイアログ ボックスが表示されます。Finder アイコンは、180 秒後に (タイムアウト エラーを防ぐため) 放棄され、ユーザーが任意の時点で「キャンセル」を押すと、エラーを生成せずに正常に終了します。入力ダイアログのデフォルトの回答を微調整して、ユーザーが正しい入力を行えるようにすることができます。たとえば、ジョブ番号が 4 桁の場合は、ここに 4 桁の数字を入力します。また、フォルダーの選択プロンプトがデスクトップを表示して開始されます。すべてのクライアント フォルダーを格納するディスクまたはフォルダーがある場合は、デスクトップを別の場所に変更できます。

choose folder with prompt "Select client folder:" default location (disk "Clients" as alias) …

明確に言うと、シェル スクリプトはすばらしいものですが、PHP 関数や Perl regex などの UNIX 層の固有の機能を取得するには、「do shell script」のみを使用することをお勧めします。Mac レイヤーで既に利用できるものはすべて、AppleScript でより簡単かつ安全に使用でき、読み取り、書き込み、および保守が容易になります。特に、フォルダの作成など、本当に基本的なこと。

于 2014-08-10T17:35:10.933 に答える
0

次のようなことができます。

      set TID to AppleScript's text item delimiters

-- Ensure the answer is formatted properly
repeat
    try
        set theAnswer to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
        set AppleScript's text item delimiters to "-"
        set {jobNum, jobDes} to {text item 1 of theAnswer, text item 2 of theAnswer}
        exit repeat
    on error
        display dialog "Please enter your response in this format [JobNumber]-[Description]" buttons {"Cancel", "Try again"} default button "Try again"
    end try
end repeat

set folderpath to POSIX path of (choose folder with prompt "Select client folder")

set folderNames to {"-Links", "-PDFs", "-Supplied", "-Versions"}
repeat with aName in folderNames
    do shell script "mkdir -p " & quoted form of (folderpath & jobNum & "-" & jobDes & "/" & jobNum & "-" & jobDes & aName as text)
end repeat

set AppleScript's text item delimiters to TID
于 2012-06-27T14:12:33.170 に答える