W2K-Networker 11 Geschrieben 18. August 2006 Melden Teilen Geschrieben 18. August 2006 Hallo Leute, ich habe mir den Systemscripter V6 von scriptinternals heruntergeladen, um damit ein Script zu erstellen. Das Script stammt aus dem Buch Windows XP Professional - Das Handbuch. Nun kommt das Problem: Das Skript funktioniert nicht. Es kommt die Fehlermeldung: Error occured in line 18 near column 3: Laufzeitfehler in Microsoft VBScript: Objekt erforderlich: 'drive' Tipp: Click on the warning sign in the indicator margin to jump to the code that caused the error. Hier das dazugehörige Skript: antwort = MsgBox("Wollen Sie defragmentieren?", _ vbYesNo + vbQuestion + vbSystemModal) If antwort = vbYes Then Set wshshell = CreateObject("WScript.Shell") Set fs = CreateObject("Scripting.FileSystemObject") Set drives = fs.Drives If drive.drivetype = 2 Then cmd = "defrag" & drive.driveletter & ":" & "-f -v" res = wshshell.Run(cmd, 1, True) End If End If Ich hoffe es kann mir hier jemand helfen. Ziel des Skripts ist es lediglich ein Defrag der Platten bei der Abmeldung durchzuführen. Also wenn es noch alternativen Ideen gibt, immer her damit. Vielen Dank und ein schönes WE. Zitieren Link zu diesem Kommentar
Schluml 10 Geschrieben 18. August 2006 Melden Teilen Geschrieben 18. August 2006 Set drives = fs.Drives If drive.drivetype = 2 Then cmd = "defrag" & drive.driveletter & ":" & "-f -v" soll sicher If drive[b]s[/b].drivetype = 2 Then cmd = "defrag" & drive[b]s[/b].driveletter & ":" & "-f -v" heißen zumindest sagt mir das die Fehlermeldung... Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 18. August 2006 Melden Teilen Geschrieben 18. August 2006 antwort = MsgBox("Wollen Sie defragmentieren?", _ vbYesNo + vbQuestion + vbSystemModal) If antwort = vbYes Then Set wshshell = CreateObject("WScript.Shell") Set fs = CreateObject("Scripting.FileSystemObject") Set drives = fs.Drives If drive.drivetype = 2 Then cmd = "defrag" & drive.driveletter & ":" & "-f -v" res = wshshell.Run(cmd, 1, True) End If End If Hi, das kann so nicht funktionieren. Du definierst die Variable drives als fs.drives. In der nächsten Zeile verwendest du dann drive.drivetype. Du hast aber drive nirgends definiert. Ich nehme an, dass du durch alle Laufwerke gehen willst. In dem Fall fehlt ein for each. Mit for each kannst du alle Mitglieder einer Collection nacheinander anfassen. Das ist besser als ein normales for next, weil du für die for each keine Anzahl der Elemente wissen musst. Die Collection wäre in dem Fall drives, das einzelne Element drive, also: ... Set fs = CreateObject("Scripting.FileSystemObject") Set drives = fs.Drives for each drive in drives If drive.drivetype = 2 Then cmd = "defrag" & drive.driveletter & ":" & "-f -v" res = wshshell.Run(cmd, 1, True) End If next Ob die cmd so stimmt, hab ich jetzt nicht ausprobiert, du kannst dich aber noch mal melden, wenns Fragen gibt. Einfacheres Beispiel, das auf das set drives verzichtet und die Collection verdeutlicht: Set fs =CreateObject("Scripting.FileSystemObject") for each drive in fs.drives wscript.echo objdrive.driveletter next Gruß woiza Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 18. August 2006 Melden Teilen Geschrieben 18. August 2006 soll sicher If drive[b]s[/b].drivetype = 2 Then cmd = "defrag" & drive[b]s[/b].driveletter & ":" & "-f -v" heißen zumindest sagt mir das die Fehlermeldung... Nö, das funktioniert nicht, weil drives eine Collection aller Laufwerke und nicht ein spezielles Laufwek ist. Somit hat drives auch keinen driveletter Gruß woiza Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.