Applescript 尝试将文件复制到共享服务器时出错

Applescript 尝试将文件复制到共享服务器时出错,applescript,Applescript,我正在尝试将重复的主文件夹(桌面、电影、音乐、家庭等)获取到共享服务器。我终于能够使用字符串和变量的串联来安装驱动器。但是现在我在复制线路上遇到了一个错误。如果我手动装入驱动器,此代码可以工作,但在通过applescript装入驱动器时似乎不起作用 --Assigns variable to username tell application "System Events" set user_name to name of current user end tell --Prompts

我正在尝试将重复的主文件夹(桌面、电影、音乐、家庭等)获取到共享服务器。我终于能够使用字符串和变量的串联来安装驱动器。但是现在我在复制线路上遇到了一个错误。如果我手动装入驱动器,此代码可以工作,但在通过applescript装入驱动器时似乎不起作用

--Assigns variable to username
tell application "System Events"
    set user_name to name of current user
end tell

--Prompts for eraider as string
set returnedName to (display dialog "Enter Raider Name:" default answer "eRaider" buttons {"Continue"} default button 1 giving up after 5)

--Sets string as variable
set work_name to text returned of returnedName


--Sets department list
set deptList to {"dept1", "dept2", "dept3", "dept4"}

set dept_name to {choose from list deptList} as string

--Tells Finder to mount shared drive
tell application "Finder"
    mount volume ("smb://vserver/athletics/"&dept_name&"/"&work_name)
end tell

--Sets sever as variable
set vserver to POSIX file ("/Volumes/" & work_name)

--Copies Documents to Server
set source to POSIX file ("/Users/" & user_name & "/Documents")


tell application "Finder"

    duplicate source to vserver with replacing

end tell
我得到这个错误

错误“Finder出现错误:AppleeEvent处理程序失败。”编号-10000


在这一行:
将源代码复制到vserver,并替换

您的代码中有一些奇怪的东西。大多数错误不会影响您的错误,但应该予以纠正。例如,“mount volume”命令不是Finder命令,而是applescript命令,因此您不应该告诉Finder执行该命令。接下来,“选择文件”行。。。为什么它周围有括号?再加上其他的小东西。所以我清理了代码

要解决您的具体问题,可能需要两件事。首先,我使用if语句确保在复制文件之前已装入磁盘。其次,“POSIX文件”命令也可能导致问题。这是一个不寻常的命令,因为它并不总是按照您期望的方式工作。因此,在这段代码中,为了确保避免该命令出现任何问题,我强制将其转换为文本,然后在复制命令中,通过在其前面使用单词“folder”将其转换为正确的格式

所以我没有测试这段代码,但它应该可以工作。我希望有帮助

--Assigns variable to username
tell application "System Events" to set user_name to name of current user

--Prompts for eraider as string
set work_name to text returned of (display dialog "Enter Raider Name:" default answer "eRaider" buttons {"Continue"} default button 1 giving up after 5)

--Sets department list
set deptList to {"dept1", "dept2", "dept3", "dept4"}

set dept_name to item 1 of (choose from list deptList)

--mount shared drive
mount volume ("smb://vserver/athletics/" & dept_name & "/" & work_name)

if work_name is in (list disks) then
    --Copies Documents to Server
    set source to (POSIX file ("/Users/" & user_name & "/Documents")) as text
    tell application "Finder" to duplicate folder source to disk work_name with replacing
else
    display dialog "Disk " & work_name & " is not mounted"
end if
更好的方法是使用“path to”命令建立文档文件夹的路径。这样,您就不需要使用“POSIX文件”,甚至不需要知道用户名,因为“path to”命令会自动为当前用户工作。另外,我会对装载卷的内容进行更多的错误检查。所以我真的会这样写你的代码。。。我也没有测试这个

--Prompts for eraider as string
set work_name to text returned of (display dialog "Enter Raider Name:" default answer "eRaider" buttons {"Continue"} default button 1 giving up after 5)

--Sets department list
set deptList to {"dept1", "dept2", "dept3", "dept4"}

set dept_name to item 1 of (choose from list deptList)

--mount shared drive
set isMounted to false
if work_name is not in (list disks) then
    mount volume ("smb://vserver/athletics/" & dept_name & "/" & work_name)

    -- wait for the volume to be mounted but only wait for a limited time before failing (10 seconds in this case)
    set inTime to current date
    repeat
        delay 0.2
        if work_name is in (list disks) then
            set isMounted to true
            exit repeat
        end if
        if (current date) - inTime is greater than 10 then exit repeat
    end repeat
else
    set isMounted to true
end if

--Copies Documents to Server
if isMounted then
    set source to path to documents folder
    tell application "Finder" to duplicate source to disk work_name with replacing
else
    display dialog "There was an error mounting disk " & work_name buttons {"OK"} default button 1
end if

嗯??在您的代码中,我看不到行
将源复制到vshare并替换
好的,我更新了问题描述以使其更清楚。您是否同意在尝试复制这些文件时smb驱动器已装入?如果在设置
vserver
变量之前未尝试使用
delay 10
。我确定,因为我在运行脚本之前卸载了驱动器。然后,当运行脚本时,驱动器被重新装载,我可以手动访问它。是的,但可能是Finder正在装载远程磁盘,而脚本继续运行,并希望将文件复制到此尚未装载的磁盘。使用您提供的第二个磁盘,它显示“装载磁盘时出错”错误。我想我需要完整地写这件事。很好,这就是为什么我们把错误检查放进去。。。现在你知道你的问题在哪里了。不知怎的,你的驱动器没有安装。您到驱动器的路径正确吗?专注于只解决代码的这一部分。