Just nu i M3-nätverket
Gå till innehåll

Felhandteringsproblem med VBScript


Per_Anders

Rekommendera Poster

Hej!

 

Var gång en användare loggar in på datorn i mitt nätverk sparas en massa filer och kataloger i C:\Documents And Settings. Dessa filerna vill jag ta bort var gång användaren loggar ut. Detta har jag tänkt att göra med ett VBScript. Följande kod, som är intressant för detta inlägget, finns i scriptet:

 

Sub removeFilesAndFolders(rootFolder)

On Error Resume Next

 

For Each F in rootFolder.Files

F.Delete(True)

Next

 

For Each SF in rootFolder.SubFolders

removeFilesAndFolders(SF)

Next

 

rootFolder.Delete(True)

End Sub

 

On Error Resume Next

 

' Active Directory objekt

Set ADSysInfo = CreateObject("ADSystemInfo")

Set UserObject = GetObject("LDAP://" & ADSysInfo.UserName)

 

' Strängar

userHomeFolderPath = "C:\Documents and Settings\" + UserObject.sAMAccountName

 

' Filhantering

Set FileSystemObject = CreateObject("Scripting.FileSystemObject")

Set userHomeFolder = FileSystemObject.GetFolder(userHomeFolderPath)

 

' Tar bort alla filerna i hemkatalogen på hårddisken

removeFilesAndFolders(userHomeFolder)

 

Tanken bakom scriptet är att alla filer skall tas bort. Dock finns det ett problem: när scriptet körs är vissa av filerna igång. Dessa filer kan ju inte tas bort förän de är stängda. Scriptet skall ta hänsyn till detta (är det tänkt) genom att gå rekursivt genom användarens katalogstruktur och först ta bort filerna och därefter ta bort underkatalogerna. De filer som ej går att ta bort skall den bara hoppa över (därav On Error Resume Next).

 

Problemet är att den verkar inte göra det som står i Microsofts sida (hoppa till nästa rad vilket bör vara "Next" efter t.ex. F.Delete(True)):

 

"On Error Resume Next Specifies that when a run-time error occurs, control goes to the statement immediately following the statement where the error occurred where execution continues. Use this form rather than On Error GoTo when accessing objects."

 

Vissa kataloger och filer lämnas orörda antagligen p.g.a. att det uppstår ett fel. Jag har testat det mesta, t.ex. sätta Err.Clear efter alla <något>.Delete(True) men ej givit resultat. Jag har också försökt följande variant och fått upp mot 69 fel:

 

Sub ErrorHandler(v)

v = v+1

Err.Clear

End Sub

 

Dim numberOfErrors

 

On Error Resume Next

numberOfErrors = 0

 

For Each F in rootFolder.Files

F.Delete(True)

If Err.Number <> 0 Then ErrorHandler(numberOfErrors) End If

Next

 

MsgBox numberOfErrors

 

Tanken på att scriptet kan fungera, men att det är så många filer som är öppna har funnits men katalogen Temporary Internet Files i mappen C:\Documents And Settings\<username>\Local Settings\Temporary Internet Files och dess filer är orörda. Dessutom har jag kollat rättigheterna för katalogerna; användaren har full kontroll.

 

Finns det ett sätt att undersöka om det går att ta bort filen eller inte? Hur tror ni att man kan komma tillrätta med problemet?

 

Använder Windows 2000 och Windows 2000 Server

 

Tacksam för svar!

 

Anders Andersson

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Hej!

 

Är inte 100% på vad felet är men har två tips:

 

1. Ändra funktionsdeklarationen till

[color="#0000ff"]Sub[/color] removeFilesAndFolders(byval rootFolder)

 

2. Kommentera på bort

[color="#0000ff"]On Error Resume[/color] [color="#0000ff"]Next[/color]

för att se om det blir några andra körningsfel förutom felet när en fil är låst. Detta för att undersöka så ditt script inte innehåller några logiska fel.

 

Lycka till.

 

Mvh. John

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...