W2K-Networker 11 Geschrieben 18. August 2006 Melden 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.
Schluml 10 Geschrieben 18. August 2006 Melden 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...
woiza 10 Geschrieben 18. August 2006 Melden 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
woiza 10 Geschrieben 18. August 2006 Melden 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden