Fehlermeldung, wenn die filesystemobject.copyfolder-Methode eine schreibgeschützte Datei entdeckt: "Zugriff verweigert"


Problembeschreibung


Sie versuchen, den folgenden Code verwenden, um den Inhalt eines bestimmten Ordners Zielordner kopieren, eine schreibgeschützte Datei enthält:
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

Hinweis In diesem Code Source_folder stellt den eigentlichen Ordnernamen und Destination_folder ist der Name des aktuellen Zielordners.
Wenn Sie diesen Code ausführen, wird die folgende Fehlermeldung im Dialogfeld Windows Script Host :
Skript: C:\folderName\test.vbs

Zeile: 3

Char: 1

Fehler: Zugriff verweigert

Code: 800A0046

Quelle: Microsoft VBScript-Laufzeitfehler
Dieses Verhalten wird erwartet. In der Regel erhalten Sie eine Fehlermeldung "Zugriff verweigert", stößt die filesystemobject.copyfolder -Methode eine schreibgeschützte Datei. Allerdings können Sie eine Datei in einen Ordner ziehen, die eine schreibgeschützte Datei mit demselben Namen enthält. In diesem Fall wird die folgende Meldung in Windows Explorer:
Dieser Ordner enthält bereits eine schreibgeschützte Datei mit dem Namen "test.txt"

Möchten Sie die vorhandene Datei ersetzen:

target_file_information
mit diesem?

source_file_information

Ursache


Dieses Problem tritt aufgrund einer Beschränkung der CopyFolder -Methode auf. Die CopyFolder -Methode kann eine Datei im Zielordner nicht überschreiben, wenn diese Datei das Attribut schreibgeschützt hat. Die CopyFile -Methode hat dieselbe Einschränkung.

Problemlösung


Wenn das Problem mithilfe des Dienstprogramms XCOPY mit r schreibgeschützte Dateien überschrieben. Im folgenden Codebeispiel zeigt eine Möglichkeit, das Dienstprogramm "XCOPY" verwenden.

Microsoft bietet Programmierbeispiele lediglich zur Veranschaulichung, ohne ausdrückliche oder konkludente Gewährleistung. Dies beinhaltet, ist jedoch nicht beschränkt auf, konkludente Gewährleistungen der Tauglichkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel setzt voraus, dass Sie mit der von Beispielen verwendeten Programmiersprache und den Tools, die zum Erstellen und Debuggen von Prozeduren verwendet werden, vertraut sind. Microsoft-Supporttechniker helfen der Erläuterung der Funktionalität bestimmter Prozeduren. Allerdings werden sie diese Beispiele nicht ändern, um zusätzliche Funktionalität bereitzustellen oder Prozeduren erstellen, die Ihren spezifischen Bedürfnisse erfüllen.
Dim oShell, source, destination source = "C:\myFolder\*" 
destination = "D:\myOtherFolder"
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "xcopy.exe " & source & " " & destination & " /R /Y"
Set oShell = Nothing

In diesem Codebeispiel ermöglicht r schreibgeschützte Dateien überschrieben. Die Befehlszeilenoption unterdrückt gefragt, die vorhandene Zieldatei überschrieben werden soll.

Hinweise
  • Die Befehlszeilenoption kann in der Umgebungsvariablen COPYCMD voreingestellt. Wenn die Aufforderung angezeigt werden soll, können Sie/-y Version der Befehlszeilenoption . /-Y Version des Schalters schaltet der Befehlszeilenoption in der Umgebungsvariablen COPYCMD voreingestellt .
  • ROM ist nicht verfügbar in Windows Vista. Verwenden Sie zum Beheben dieses Problems in Windows Vista Robocopy.exe Datei anstelle der Datei Xcopy.exe im Codebeispiel.