0

ドライブ上の画像のファイル名とパスを指定して、applescript から画像を削除する (ゴミ箱に移動する) 方法。

このスクリプトはシェルから開始され、パラメータとしてパス (必要に応じてサイズまたはその他のプロパティ) を含む (有効な) ファイル名を取得できます。

これまでのところ、画像を名前 (通常はファイル名) で選択し、コメントを設定することができました。そのコメントを検索して、そのコメントを含むすべての画像を一度に削除できます。しかし、ランダムな画像名では、名前に無関係な画像が見つかるため、これは不可能です。

4

3 に答える 3

2

フィリップは正しい考えを持っていますが、物事を必要以上に難しくしています。:) 以下は私のためにトリックを行います:

on run (args)
    set thePath to first item of args
    tell application "iPhoto"
        remove (every photo where image path is equal to thePath or original path is equal to thePath)
    end tell
end run

これにより、最初のコマンド ライン引数が取得され、それが削除するファイル パスとして使用されます。iPhoto の写真には、各写真の変更されたコピーと元のコピーの両方が含まれている可能性があるため、スクリプトは、削除する写真を探すときに、写真の元のパスと現在のイメージ パスの両方をテストします。

ただし、「元のパス」プロパティは iPhoto 8.x にのみ存在することに注意してください。そのため、以前のバージョンの iPhoto を使用している場合は、その部分を取り出して、正しい写真パスを提供できるようにする必要があります ( Modified フォルダーがある場合は Modified フォルダー、それ以外の場合は Originals フォルダー内のパス)。

また、「削除」コマンドが機能するのに「削除」コマンドが機能しない理由は、iPhoto が最悪だからです。「削除」コマンドは本当に機能するはずです。

于 2010-08-13T20:51:53.913 に答える
1

iPhoto は、Finder パスではなく POSIX パスを保存します (つまり、「:」で区切られます)。そのため、名前とパスがあればimage path、クラスのプロパティを使用しphotoて比較し、一致する場合は写真を削除できます。iPhoto には、photosこれを簡単にするための list プロパティがあります。iPhoto に保存されているイメージ パスと比較する前に、シェルから取得したパスを消去する必要があります (\主に " " エスケープ文字を削除します)。

tell application "iPhoto"
    set pathToFile to "/Users/username/Pictures/iPhoto Library/Originals/2007/Sep 10, 2007/genericImageName.jpg"
    set lastPhoto to count photos
    repeat with thisPhoto from 1 to lastPhoto
        set thePhoto to photo thisPhoto
        set pathToPhoto to image path of thePhoto
        if pathToFile contains pathToPhoto then
            try
                delete thePhoto
                exit repeat
            on error the error_message number the error_number
                display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1
            end try
        end if
    end repeat
end tell

もちろん、これを試してみるとdelete、ハンドラーが失敗したことを意味するエラー -10000 が表示されました。(それについて私ができることはあまりありません。)

于 2010-08-13T17:23:16.473 に答える