如何防止密码提示弹出多次

时间:2014-06-11 19:03:57

标签: applescript

我的代码如下:

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

2 个答案:

答案 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