0

私は奇妙なAppleScriptの問題を抱えており、根本的な原因や解決策を理解できないようです。以下のプロセスを模倣したプロセスでファイルをダウンロードしようとしています。このコードは失敗し、「 URLアクセススクリプトでエラーが発生しました:一部のデータを予期されたタイプにできません」と報告されます。番号-1700からアイテム"

ローカルパス名から3文字を削除すると(どの3文字でも問題ないようです)、正常に実行されます。2文字だけ削除してもエラーは発生しませんが、ダウンロードするファイルは破損したJPGです。「doshellscript」行のcurlで同じことを試してみましたが、ファイル名の長さを問わず、サイレントに(returning "")、失敗したようです。これを引き起こしているのは何ですか、そして私はそれについて何ができますか?

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
end tell
4

3 に答える 3

1

最終的に、一時的な短い名前にダウンロードしてから、Finderに名前を変更することにしました。書き直されたスクリプトは次のとおりです。

tell application "URL Access Scripting"
    set tempFileName to "abc.jpg"
    set downloadPath to (POSIX path of (path to downloads folder))

    set tempFile to download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to downloadPath & tempFileName
end tell

tell application "Finder" to set name of file tempFile to "02331_veiledinclouds_2560x1600.jpg"

私は、必要な場合にのみファイルの名前を変更するregulus6633のアプローチよりも、このアプローチの単純さを好みます。

于 2010-08-10T12:32:47.407 に答える
1

最大の問題は、macスタイルのパス(コロン付き)を使用する必要があるときに、posixスタイルのパス(スラッシュを使用)を使用していることです。Applescriptはコロンで区切られたパスを使用します。「posixpath」を使用してコロンからスラッシュに移動し、「posix file」を使用してスラッシュからコロンに移動することで、2つの間で変換できます。

また、パスを文字列として渡すことはできません。applescriptでは、ファイル指定子を使用します...そのため、文字列パスの前にfileという単語を配置しました。したがって、これを修正すると機能します。

set posixPath to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
set macPath to (POSIX file posixPath) as text

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to file macPath
end tell

ただし、ファイル名の長さの問題があるはずです。実行すると、ダウンロードしたファイルのファイル名が31文字に短縮されるためです。

編集:必要に応じてファイルを切り捨て、ダウンロードし、名前を変更するスクリプトを次に示します。

set posixPath to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
set baseName to do shell script "/usr/bin/basename " & quoted form of posixPath

set needsRenaming to false
if (count of baseName) is greater than 31 then
    set downloadName to text -31 thru -1 of baseName
    set basePath to do shell script "/usr/bin/dirname " & quoted form of posixPath
    set posixPath to basePath & "/" & downloadName
    set needsRenaming to true
end if

set macPath to (POSIX file posixPath) as text

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to file macPath
end tell

if needsRenaming then
    tell application "Finder"
        set name of file macPath to baseName
    end tell
end if
于 2010-08-09T21:23:13.460 に答える
1

この関数は、31文字しか許可されていない古いCarbon(またはpre-Carbon)API呼び出しをまだ呼び出していることは間違いありません。これに関連するGoogleリンクの一部は2003年にさかのぼり、Mac OSに関する限り、年と特定の31文字の制限は、これが最新の状態になっていない古いAPIであることを示しています。これは、Applescriptの暗いコーナーの問題です。たぶん、Satimageまたは誰かがこれを回避するスクリプト追加を作成しました。私はあなたが立ち往生していて、この追加以外のどこかから助けを得る必要があると思います。何を試しても動作しなかったので、これが間違っていることを証明したいと思います。

于 2010-08-10T01:06:14.710 に答える