我遇到了一个奇怪的AppleScript问题,似乎无法找出根本原因或解决方案。我正在尝试下载文件,其过程模仿下面的文件。此代码对我失败,报告“ URL访问脚本有错误:无法将某些数据转换为预期类型。”编号-1700到项目“
如果我从本地路径名中删除3个字符(并且它似乎并不重要3),那么它运行正常。如果我只删除2个字符,它不会抛出错误,但它下载的文件是一个损坏的JPG。我尝试在“do shell script”行中使用curl做同样的事情,并且它似乎也因任何文件名长度而失败,尽管是静默的(返回""
)。造成这种情况的原因是什么,我该怎么办?
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
答案 0 :(得分:1)
当你应该使用mac风格的路径(使用冒号)时,你最大的问题是你正在使用posix风格的路径(使用斜杠)。 Applescript使用冒号分隔的路径。我们可以使用“posix path”从冒号转换为斜杠,将“posix文件”转换为斜线到冒号。
你不能只把路径作为字符串传递。在applescript中我们使用文件说明符...这就是我将word文件放在字符串路径前面的原因。因此,一旦我们解决了这个问题,这就行了。
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
答案 1 :(得分:1)
我愿意打赌这个函数仍然会调用一些只允许31个字符的古代Carbon(或pre-Carbon)API调用。与此相关的一些谷歌链接可以追溯到2003年,就Mac OS而言,年份和特定的31个字符限制都指向这是一个过时的API,从未更新过。这是Applescript较暗角落的问题。也许Satimage或某人制作了一个脚本加法可以解决这个问题。我认为你很困难,需要从这个补充之外的某个地方获得帮助。我希望在这个问题上证明是错误的,因为无论我尝试什么,我都无法工作。
答案 2 :(得分: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方法的简单性,只有在需要时才重命名该文件。