Разрешение на копирование в 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
Ответы
Ответ 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"
Включите имя файла в папку, в которую вы копируете.