cha*_*lax 3 applescript path error-code osascript
我有一个正在我的计算机上运行的Applescript,但不在我的同事身上.操作路径时出现两个错误:-10004
和-10000
.我知道如何解决这个问题,但首先我想了解这些错误代码.
这是脚本(我删除了无用的部分,完整版本在github上):
-- export all layers to image files
-- Settings
property exportFileExtension : "png"
property ADD_CANVAS_NUMBER : true
-- End of Settings
on file_exists(FileOrFolderToCheckString)
try
alias FileOrFolderToCheckString
return true
on error
return false
end try
end file_exists
tell application "OmniGraffle Professional 5"
set theWindow to front window
set theDocument to document of theWindow
set theFilename to name of theDocument
-- remove .graffle
-- FIRST ERROR IS HERE -10004
set theFilename to text 1 thru ((offset of "." in theFilename) - 1) of theFilename
set export_folder to (choose folder with prompt "Pick the destination folder") as string
set export_folder to export_folder & theFilename & ":"
-- create folder
if file_exists(export_folder) of me then
try
display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
on error errText number errNum
if (errNum is equal to -128) then
return
end if
end try
-- deletes the folder (necessary because some layers may have been renamed
do shell script "rm -rf " & quoted form of POSIX path of export_folder
else
-- creates the folder
do shell script "mkdir -p " & quoted form of POSIX path of export_folder
end if
set canvasCount to count of canvases of theDocument
set i to 0
repeat with canvasNumber from 1 to canvasCount
set theCanvas to canvas canvasNumber of theDocument
set canvas_name to name of theCanvas
set canvas of theWindow to theCanvas
set layerCount to count of layers of theCanvas
-- ...
set area type of current export settings to current canvas
set draws background of current export settings to false
set include border of current export settings to false
set canvas_filename to ""
-- ...
set canvas_filename to canvas_filename & canvas_name
repeat with layerNumber from 1 to layerCount
set theLayer to layer layerNumber of theCanvas
if (theLayer is prints) and (class of theLayer is not shared layer) then
set layer_name to name of theLayer as string
set filename to canvas_filename & " - " & layer_name & "." & exportFileExtension
set export_filename to export_folder & filename
-- show the layer, export, then hide the layer
if character 1 of layer_name is not "*" then
set visible of theLayer to true
-- SECOND ERROR IS HERE -1000
save theDocument in export_filename
set visible of theLayer to false
end if
end if
end repeat
end repeat
end tell
Run Code Online (Sandbox Code Playgroud)
这是日志:
tell application "OmniGraffle Professional 5"
get window 1
--> window id 5032
get document of window id 5032
--> document "MSD.graffle"
get name of document "MSD.graffle"
--> "MSD.graffle"
offset of "." in "MSD.graffle"
--> error number -10004
end tell
tell current application
offset of "." in "MSD.graffle"
--> 4
end tell
tell application "OmniGraffle Professional 5"
choose folder with prompt "Pick the destination folder"
--> alias "Macintosh HD:Users:Romain:Desktop:Temp:"
display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
--> {button returned:"Erase"}
do shell script "rm -rf '/Users/Romain/Desktop/Temp/MSD/'"
--> error number -10004
end tell
tell current application
do shell script "rm -rf '/Users/Romain/Desktop/Temp/MSD/'"
--> ""
end tell
tell application "OmniGraffle Professional 5"
...
...
save document "MSD.graffle" in "Macintosh HD:Users:Romain:Desktop:Temp:MSD:1- Navigation - 1Layout.png"
--> error number -10000
Result:
error "OmniGraffle Professional 5 got an error: AppleEvent handler failed." number -10000
Run Code Online (Sandbox Code Playgroud)
谢谢!
我更新了脚本,但仍然出错-10000
.以下是修改后的行:
save theDocument in file exportFilename
Run Code Online (Sandbox Code Playgroud)
和
-- Create folder if does not exist, remove it otherwise
-- Shell script should not be executed inside tell application block
if file_exists(export_folder) of me then
try
display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
on error errText number errNum
if (errNum is equal to -128) then
return
end if
end try
tell me
-- Delete the folder
do shell script "rm -rf " & quoted form of POSIX path of export_folder
end tell
else
tell me
-- Create the folder
do shell script "mkdir -p " & quoted form of POSIX path of export_folder
end tell
end if
Run Code Online (Sandbox Code Playgroud)
错误-10000 - -10015是事件注册表错误.
错误-10000本身不是目标错误,因为它在这些情况下会抛出-1708.大多数情况下,它不是目标错误,而是不完整的命令或括号的错误使用.如果你使用怎么办:
save theDocument in file export_filename
Run Code Online (Sandbox Code Playgroud)
错误-10004是权限违规错误,这意味着您正在对不允许的文件执行某些操作.可能你不允许删除文件,并且应该总是在应用程序块之外使用shell脚本命令.问题是目标应用程序可以作为脚本之外的另一个用户运行.我不是说这是错误,但有可能这是问题所在.否则,您只是没有足够的权限,您需要询问用户管理员权限.
do shell script "do something" with administrator privileges.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7739 次 |
最近记录: |