Feilmelding når metoden filesystemobject.copyfolder støter på en skrivebeskyttet målfil: "Ingen tilgang"


Symptomer


Du prøver å bruke følgende kode til å kopiere innholdet i en bestemt mappe til en målmappe som inneholder en skrivebeskyttet fil:
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

Obs! Source_folder representerer faktiske kilde mappenavnet i denne koden, og destination_folder representerer det faktiske målstedet mappenavnet.
Når du kjører denne koden, får du følgende feilmelding i Windows Script Host -dialogboksen:
Skript: C:\folderName\test.vbs

Linje: 3

CHAR: 1

Feil: Tilgang

Kode: 800A0046

Kilde: Microsoft VBScript kjøretidsfeil
Dette er en forventet virkemåte. Vanligvis mottar du en feilmelding av typen "Ingen tilgang" når det oppstår en skrivebeskyttet målfil for metoden filesystemobject.copyfolder . Du kan imidlertid dra en fil til en mappe som inneholder en skrivebeskyttet fil med samme navn. I dette tilfellet, får du følgende melding i Windows Utforsker:
Denne mappen inneholder allerede en skrivebeskyttet fil med navnet 'test.txt'

Vil du erstatte den eksisterende filen:

target_file_information
med den?

source_file_information

Årsak


Dette problemet oppstår på grunn av en begrensning i CopyFolder -metoden. Metoden CopyFolder kan ikke overskrive en fil i målmappen hvis filen ikke har det skrivebeskyttede attributtet sett. CopyFile -metoden har dette samme begrensning.

Oppløsning


Hvis du vil løse dette problemet, kan du bruke XCOPY-verktøyet sammen med bryteren /R overskrive skrivebeskyttede filer. Følgende kodeeksempel viser én måte å bruke XCOPY-verktøyet til å gjøre dette.

Microsoft bruker ment som eksempler, uten garanti, verken direkte eller indirekte. Dette inkluderer, men er ikke begrenset til, eventuelle stilltiende garantier om salgbarhet eller anvendelighet for særskilte formål. Denne artikkelen forutsetter at du er kjent med programmeringsspråket som anvendes, og verktøyene som brukes til å opprette og feilsøke prosedyrer. Microsofts kundestøtteteknikere kan hjelpe deg med å forklare funksjonaliteten til en bestemt prosedyre. De endrer imidlertid ikke disse eksemplene for å lage forbedret funksjonalitet eller lage prosedyrer som dekker dine spesifikke behov.
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

I dette kodeeksemplet /R -bryteren gjør det mulig for overskriving av skrivebeskyttede filer. Bryteren /Y Undertrykker forespørselen om å bekrefte at du vil overskrive den eksisterende målfilen.

Notater
  • Bryteren /Y kan være forhåndsinnstilt i miljøvariabelen COPYCMD . Hvis du vil at meldingen skal vises, kan du bruke /-Y -versjonen av bryteren /Y . /-Y -versjonen av bryteren slår av bryteren /Y som er forhåndsinnstilt i miljøvariabelen COPYCMD .
  • XCOPY-verktøyet er ikke tilgjengelig i Windows Vista. Hvis du vil løse dette problemet i Windows Vista, kan du bruke filen Robocopy.exe i stedet for Xcopy.exe-filen i kodeeksemplet.