我的代码如下:
set sourceFolder1 to (path to library folder as text) & "Frameworks:SDL.framework"
set sourceFolder2 to (path to library folder as text) & "Frameworks:SDL_ttf.framework"
set sourceFolder3 to (path to library folder as text) & "Frameworks:SDL_image.framework"
tell application "Finder"
if exists folder sourceFolder1 then
delete folder sourceFolder1
end if
if exists folder sourceFolder2 then
delete folder sourceFolder2
end if
if exists folder sourceFolder3 then
delete folder sourceFolder3
end if
end tell
当我测试它时,密码提示会弹出3次以询问密码。有没有办法防止密码提示弹出多次?感谢。
LJ
答案 0 :(得分:1)
Finder要求输入密码是因为您试图从用户没有删除权限的位置删除文件。
解决此问题的一种方法是通过shell命令进行删除。将delete folder sourcefolder1
替换为:
do shell script ("rm -rf '" & posix path of sourcefolder1 & "'") ¬
with administrator privileges user name "username" password "password"
然后它根本不会问。如果您想要询问一次,请从user name
开始删除所有内容。它将记住后续命令的条目。
更新:根据以下评论,需要能够将项目移至“已删除邮件”,而不是像rm
那样将其彻底删除。我无法用直接的AppleScript思考任何方法,因为管理员提示来自Finder,AppleScript(据我所知)只能以do shell script
编程方式执行特权操作命令。所以我写了一个例程,它应该等同于#34; Move To Trash"在Finder中:
to deleteItem(thisItem)
set thisItemPath to (POSIX path of thisItem)
set uid to (do shell script "id -u")
if thisItemPath starts with "/Volumes" then
set AppleScript's text item delimiters to "/"
set volName to text item 3 of thisItemPath
set AppleScript's text item delimiters to ""
set targetPath to ¬
("/Volumes/" & volName & "/.Trashes/" & uid)
else
set targetPath to ((POSIX path of (path to home folder)) & ".Trash")
end if
set moveToTrashCmd to ¬
("mkdir -p '" & targetPath & "'; " & ¬
"mv '" & thisItemPath & "' '" & targetPath & "'")
-- set global vars first for userName and password, or omit for prompt
do shell script moveToTrashCmd ¬
with administrator privileges user name userName password userPw
end if
end deleteItem
这是一个使用例程的示例程序:
global fileItems, userName, userPw
on run
set userPw to "password"
set AppleScript's text item delimiters to ":"
set userName to text item -2 of (path to home folder as string)
set AppleScript's text item delimiters to ""
try
fileItems
on error
set fileItems to ¬
(choose folder with prompt ¬
"Select folders to delete:" with multiple selections allowed)
end try
repeat with thisItem in fileItems
deleteItem(thisItem)
end repeat
end run
-- drag 'n' dropped files
on open docs
set fileItems to docs
run
end open
答案 1 :(得分:0)
要防止密码提示弹出多次:只需将所有文件夹或文件放在列表中,只需使用delete
命令。
像这样:
set frmWKsList to {}
set librF to path to library folder as text
set end of frmWKsList to librF & "Frameworks:SDL.framework"
set end of frmWKsList to librF & "Frameworks:SDL_ttf.framework"
set end of frmWKsList to librF & "Frameworks:SDL_image.framework"
set foldersToDelete to {}
tell application "Finder"
repeat with i in frmWKsList
if exists folder i then set end of foldersToDelete to i as alias
end repeat
delete foldersToDelete
end tell