0

システムイベントでAppleScriptのファイルを複製しようとして失敗しましたが、失敗しました:)最終的には常にエラー「エラー「ファイルをコピーできません。」番号-1717」が表示されます。そこで、戦術を変更し、Finderを使用して、自分がやろうとしていたことが正しいことを確認してみました。動作するコードは次のとおりです。

アプリケーションに「システムイベント」を通知する

set desktopFolder to (path to desktop folder) as string
set fullPath to desktopFolder & "Temp Export From DO"

set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry"
repeat with DOEntry in theDOEntries
    set source to path of DOEntry
    log "Source file: " & source
    set destination to fullPath as string
    log "Destination folder: " & destination
    tell application "Finder"
        duplicate file source to folder destination with replacing
    end tell
end repeat

終わりを告げる

最後のtellを削除して、システムイベントを使用すると、上記と同じエラーが発生します。システムイベント標準スイートのディクショナリには「duplicate」コマンドがあるため、ここで何が起こっているのかわかりません。また、APressノートの「LearningAppleScript、3rded」:

「システムイベントで特に厄介な欠落の1つは、ファイルとフォルダーをまだ複製できないことです。これを行う必要がある場合は、Finderが最善の策です。」

第3版は2010年のものです。マウンテンライオンでもこれは真実であるように思われます。誰かがこれを確認できますか?1717エラー番号は、ハンドラーエラーとして他のすべての場所にリストされており、ハンドラーを使用していません。

4

2 に答える 2

1

残念ながら、システムイベントを使用してファイルを複製することはできません。Finderを使用する必要があります。adayzdoneによって提供された回答でも、システムイベントは実際には重複を処理していません。

これは機能しているように見えます(システムイベントのtellブロック内にあるため)...

tell application "System Events"
    duplicate myFile to myFolder
end tell

...しかし、イベントログを調べると、Finderが実際に複製を実行していることがわかります。舞台裏では、2つのFinderオブジェクトをシステムイベントに渡します。システムイベントはFinderオブジェクトの処理方法を認識していないため、実行はオブジェクトの所有者であるFinderに渡されます。Finderはコマンドを実行します。

AppleScriptでファイルを複製する場合、残念ながら、Finderまたはを介したコマンドラインの使用に制限されますdo shell script

于 2014-09-18T04:08:43.357 に答える
0

試す:

tell application "Finder" to set desktopFolder to (path to desktop folder as text) & "Temp Export From DO" as alias
tell application "System Events" to set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry"
repeat with DOEntry in theDOEntries
    log "Source file: " & DOEntry
    log "Destination folder: " & desktopFolder
    tell application "Finder" to duplicate file DOEntry to desktopFolder with replacing
end repeat

値をログに記録する必要がない場合は、次のようにすることができます。

tell application "Finder" to set desktopFolder to (path to desktop folder as text) & "Temp Export From DO" as alias
tell application "System Events" to set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry"
tell application "Finder" to duplicate theDOEntries to desktopFolder with replacing

または:

set desktopFolder to quoted form of (POSIX path of (path to desktop folder as text) & "Temp Export From DO")
do shell script "find '/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries' -name \"*.doentry\" -type f -print0 | xargs -0 -I {} cp -a {} " & desktopFolder

質問に戻ると、重複コマンドはFinderアイテムの重複を作成します。システムイベントを使用して、次のようなFinderアイテムを複製できます。

tell application "Finder"
    set myFile to file ((path to desktop as text) & "Test File.txt")
    set myFolder to folder ((path to desktop as text) & "Test Folder")
end tell

tell application "System Events"
    duplicate myFile to myFolder
end tell
于 2012-11-07T13:41:51.597 に答える