35

我正在尝试自动将文件推送到用户的主目录中,但我遇到了“Permission Denied”错误——在这里第 6 行抛出了 CopyFile 调用。

脚本的其他部分(未显示)使用相同的源目录和目标目录创建和复制文件夹内容,它们运行良好。只有当我使用 CopyFile 时它才会失败。

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists("H:\Minecraft\.minecraft\options.txt") Then
    fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\"
End If

Set fso = Nothing

H:是一个网络主目录,当前用户对其拥有完整的读/写权限。

我已经尝试从路径中添加/删除尾部斜杠,添加"options.txt"到目标路径,删除false参数......不知道还有什么可以尝试的。有什么想法吗?

仅供参考,这段代码紧接在上面容易出错的位之前,每次都能完美执行:

If Not fso.FolderExists("H:\Minecraft\.minecraft\bin\") Then
    If Not fso.FolderExists("H:\Minecraft\.minecraft\") Then
        fso.CreateFolder("H:\Minecraft\.minecraft\")
    End If
    fso.GetFolder("C:\Minecraft\bin\").Copy "H:\Minecraft\.minecraft\"
End If
4

8 回答 8

109

我只见过CopyFile在以下三种情况之一中出现“权限被拒绝”错误的失败:

  • 源或目标的实际权限问题。
  • 目标路径是一个文件夹,但没有尾部反斜杠。
  • 源文件被应用程序锁定。
于 2013-04-18T16:48:01.417 回答
4

对我来说,添加/工作在文件夹位置的末尾。因此,如果您要复制到文件夹中,请不要忘记将/

于 2016-01-12T06:49:17.337 回答
1

要检查的另一件事是是否有任何应用程序仍保留该文件。

MoveFile 有一些问题。我的权限问题的一部分是我的脚本打开文件(在本例中为 Excel),进行修改,关闭它,然后将其移动到“已处理”文件夹。

在调试几件事时,脚本崩溃了几次。深入研究权限被拒绝错误,我发现我有 4 个 Excel 实例在后台运行,因为脚本由于上述崩溃而无法正确终止应用程序。显然他们中的一个人仍然持有该文件,因此,“许可被拒绝”。

于 2016-06-23T16:00:21.993 回答
0

根据您的源变量(sourcePath = "C:\Minecraft\bin\"),我怀疑您的硬代码指向错误的位置

fso.CopyFile "C:\Minecraft\options.txt", destinationPath, false

应该

fso.CopyFile "C:\Minecraft\bin\options.txt", destinationPath

或者

fso.CopyFile sourcePath & "options.txt", destinationPath
于 2013-04-18T08:39:18.153 回答
0

值得检查任务管理器是否有任何卡住的杂散 wscript.exe 任务。它可能是阻止访问文件的因素之一。

于 2020-06-08T19:39:08.467 回答
0

你可以这样做:

fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\options.txt"

在您复制到的文件夹中包含文件名。

于 2019-04-12T17:49:53.920 回答
0

我已经阅读了你的问题,我也遇到了同样的问题。但是在我改变了一些之后,我的问题“权限被拒绝”就解决了。

Private Sub Addi_Click()
'On Error Resume Next
'call ds
browsers ("false")
Call makeAdir
ffgg = "C:\Users\Backups\user\" & User & "1\data\"
Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.Getfolder("c:\users\Backups\user\" & User & "1\data")
    f.Attributes = 0
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
Call fso.Copyfile(filetarget, ffgg, True)

ffgg = "C:\Users\Backups\user\" & User & "1\data\",在我改变之前,ffgg = "C:\Users\Backups\user\" & User & "1\data"当我在之后添加反斜杠时"\data\",我的问题就解决了。尝试添加反斜杠。也许解决了你的问题。祝你好运。

于 2016-04-13T14:11:07.043 回答
0

您的防病毒软件可能会阻止脚本的活动。我在 AVG Antivirus 在静默模式下运行时遇到了这种情况(这意味着它不会提醒您采取的每个保护步骤,因此您会收到权限错误而没有意识到 AVG 正在阻止该操作)。在我的例子中,我调用了详细模式(关闭了静音模式),执行了脚本,AVG 提出了一个拦截警告,允许我训练 AVG 以允许该脚本运行。

于 2021-06-28T11:46:42.673 回答