Jump to content

WSH-Scripting


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

Link zu diesem Kommentar

 

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...