Подтвердить что ты не робот

Разрешение на копирование в VBS

Я пытаюсь автоматизировать загрузку файла в домашние каталоги моих пользователей, но застрял в ошибке "Отказано в доступе" - здесь появляется строка 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
4b9b3361

Ответ 1

Я только когда-либо видел сбой CopyFile ошибкой "отказано в разрешении" в одном из этих 3 сценариев:

  • Фактическая проблема с разрешением либо источника, либо пункта назначения.
  • Путь назначения - это папка, но без обратной косой черты.
  • Исходный файл заблокирован приложением.

Ответ 2

для меня добавление / работало в конце местоположения папки.  Следовательно, если вы копируете в папку, не забудьте поставить /

Ответ 3

Еще одна вещь, которую нужно проверить, - это если какие-либо приложения по-прежнему удерживают файл.

Были проблемы с MoveFile. Часть моей проблемы с разрешениями заключалась в том, что мой script открывает файл (в данном случае в Excel), делает модификацию, закрывает ее и перемещает в "обработанную" папку.

При отладке нескольких вещей, script разбился несколько раз. Копаясь в ошибке отклонения разрешения, я обнаружил, что у меня было 4 экземпляра Excel, работающих в фоновом режиме, потому что script никогда не смог надлежащим образом завершить работу приложения из-за упомянутых сбоев. По-видимому, один из них все еще держался за файл и, таким образом, "отказался".

Ответ 4

Исходя из вашей исходной переменной (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

Ответ 5

Я прочитал вашу проблему, и у меня была та же проблема. Но после того, как я изменил некоторые, моя проблема "Permission Denied" решена.

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\", моя проблема решена. Попробуйте добавить косую черту. Возможно, решила твоя проблема. Удачи.

Ответ 6

Для меня только 7-9 из 10 вызовов MoveFolder были успешными. Кроме того, каждый раз, когда я перезапускаю тест, происходит сбой в другой папке.

У меня были косые черты на моих путях, так что это не было моей проблемой.

Я закрыл все открытые файлы Excel в папке, так что это не моя проблема.

Затем я попытался исправить мою проблему, поместив DoEvents и Application.Wait(DateAdd ("S", 1 #, now)) между вызовами WorkBook.Close и FSO.MoveFolder.

Это сделало вещи лучше, но все же не идеально.

Чтобы это исправить, я поместил вызов папки перемещения в цикл, пока он не заработал. Который обычно на первом и иногда на втором вызове. Я не видел, чтобы это провалилось все десять попыток моего цикла силового движения!

В мире скрытых асинхронных функций вам нужно уделить немного времени тому, чтобы фактически произошло на каждом уровне!

Ответ 7

Вы можете сделать это:

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

Включите имя файла в папку, в которую вы копируете.