Per_Anders Posted July 14, 2004 Share Posted July 14, 2004 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 Link to comment Share on other sites More sharing options...
johnJ Posted July 29, 2004 Share Posted July 29, 2004 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.