webentwicklung-frage-antwort-db.com.de

In VBS wurde die Berechtigung für CopyFile abgelehnt

Ich versuche, das Pushing einer Datei in die Home-Verzeichnisse meiner Benutzer zu automatisieren, aber ich stecke auf dem Fehler "Permission Denied" - wird in Zeile 6 mit dem CopyFile-Aufruf ausgelöst.

Es gibt andere Teile des Skripts (nicht gezeigt), die Ordnerinhalte mithilfe derselben Quell- und Zielverzeichnisse erstellen und kopieren. Sie funktionieren einwandfrei. Nur wenn ich CopyFile verwende, schlägt das fehl.

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: ist ein Basisverzeichnis des Netzwerks, für das der aktuelle Benutzer über vollständige Lese- und Schreibrechte verfügt.

Ich habe versucht, nachfolgende Schrägstriche aus den Pfaden hinzuzufügen/zu entfernen, "options.txt" zum Zielpfad hinzuzufügen und das false-Argument zu entfernen. Irgendwelche Gedanken?

Vielen Dank!

FYI, dieser Codeabschnitt, der direkt vor dem fehleranfälligen Bit oben steht, wird jedes Mal perfekt ausgeführt:

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
22
Triz

Ich habe nur CopyFile fail mit einem Fehler "Erlaubnis verweigert" in einem dieser drei Szenarien gesehen:

  • Ein tatsächliches Berechtigungsproblem mit Quelle oder Ziel.
  • Zielpfad ist ein Ordner, der jedoch keinen nachgestellten Backslash enthält.
  • Quelldatei ist durch eine Anwendung gesperrt.
79
Ansgar Wiechers

für mich das Hinzufügen von / arbeitete am Ende des Ordners . Wenn Sie in einen Ordner kopieren, vergessen Sie nicht, / einzugeben.

3

Eine weitere Sache ist zu prüfen, ob noch Anwendungen die Datei im Griff haben.

Hatte Probleme mit MoveFile. Ein Teil meines Berechtigungsproblems war, dass mein Skript die Datei (in diesem Fall in Excel) öffnet, eine Änderung vornimmt, sie schließt und sie dann in einen "verarbeiteten" Ordner verschiebt.

Beim Debuggen einiger Dinge stürzte das Skript ein paar Mal ab. Beim Erkennen der Berechtigung wurde der Fehler gesucht. Ich habe festgestellt, dass 4 Instanzen von Excel im Hintergrund ausgeführt wurden, da das Skript die Anwendung aufgrund dieser Abstürze nie ordnungsgemäß beenden konnte. Anscheinend hatte einer von ihnen die Akte noch im Griff und damit "Erlaubnis verweigert".

1
CargoPantsMan

Aufgrund Ihrer Quellvariablen (sourcePath = "C:\Minecraft\bin\") vermute ich, dass Ihr Hardcode an der falschen Stelle zeigt 

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

sollte sein

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

oder

fso.CopyFile sourcePath & "options.txt", destinationPath
0
Dave

Für mich waren nur 7-9 von 10 MoveFolder-Aufrufen erfolgreich. Jedes Mal, wenn ich den Test erneut ausführte, wäre ein anderer Ordner fehlgeschlagen.

Ich hatte hintere Schrägstriche auf meinen Wegen, das war nicht mein Problem. 

Ich hatte alle geöffneten Excel-Dateien im Ordner geschlossen, das war also nicht mein Problem.

Also habe ich versucht, mein Problem zu beheben, indem ein DoEvents and Application.Wait (DateAdd ("S", 1 #, jetzt)) zwischen dem WorkBook.Close und den FSO.MoveFolder-Aufrufen platziert wurde.

Das hat die Dinge besser gemacht, aber immer noch nicht perfekt.

Um das Problem zu beheben, musste ich den Move-Ordneraufruf in einer Schleife platzieren, bis er funktionierte. Welches ist normalerweise beim ersten und manchmal beim zweiten Anruf. Ich habe nicht gesehen, dass alle zehn Versuche meiner Force-Move-Schleife fehlgeschlagen sind!

In der Welt der versteckten asynchronen Funktionen muss man ein wenig Zeit dafür geben, dass auf jeder Ebene tatsächlich etwas passiert ist!

0
user2715390

Du kannst das:

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

Fügen Sie den Dateinamen in den Ordner ein, in den Sie kopieren.

0
Tanner Clark

Ich habe dein Problem gelesen, und ich hatte das gleiche Problem. Aber nachdem ich einige geändert habe, ist mein Problem "Permission Denied" gelöst.

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)

Schauen Sie sich ffgg = "C:\Users\Backups\user\" & User & "1\data\" an, bevor ich es geändert habe war es ffgg = "C:\Users\Backups\user\" & User & "1\data" Wenn ich nach "\data\" Backslash hinzufüge, ist mein Problem gelöst. Versuchen Sie, den Schrägstrich wieder hinzuzufügen. Vielleicht dein Problem gelöst. Viel Glück.

0
HzzKyGcs