【问题标题】:Permission denied on CopyFile in VBSVBS 中 CopyFile 的权限被拒绝
【发布时间】:2013-04-10 21:39:31
【问题描述】:

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

脚本的其他部分(未显示)使用相同的源目录和目标目录创建和复制文件夹内容,它们运行良好。只有当我使用 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

【问题讨论】:

    标签: vbscript permission-denied file-copying


    【解决方案1】:

    根据您的源变量 (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
    

    【讨论】:

    • 啊,对不起,这是一个很好的问题,但实际上并不是错误的。我正在将该 \bin 路径用于脚本的不同部分; options.txt 文件确实位于 C:\Minecraft\options.txt。
    • (已编辑问题以更清楚地反映相关部分。)
    • 错误的源路径会产生File not found 错误。
    【解决方案2】:

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

    • 源或目标的实际权限问题。
    • 目标路径是一个文件夹,但没有尾部反斜杠。
    • 源文件被应用程序锁定。

    【讨论】:

    • 所以它绝对不是#2,它可能不是#3...目的地的权限很好,因为我可以在那里复制其他东西。我将如何检查/修复源的权限? (也就是说,他们需要什么才能允许文件复制?只需阅读,对吧?它已经有了......)
    • 删除文本文件,重新创建它,现在脚本可以工作了。所以肯定有一些我看不到的时髦权限。感谢您帮助缩小范围!
    • "目标路径是一个文件夹,但没有尾部反斜杠。"谢谢!
    • 这对我来说也是第 2 项。
    • @user2366975 那应该是 Erik Lippert。不过,行为实际上是documented
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      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\" 之后添加反斜杠时,我的问题就解决了。尝试添加反斜杠。也许解决了你的问题。祝你好运。

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

          你可以这样做:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-10-25
                • 1970-01-01
                • 2014-09-17
                • 2018-06-11
                • 2015-08-30
                • 1970-01-01
                相关资源
                最近更新 更多