Windows Scripting Host

wsh-doku wsh allgemein wscript shell wscript network file system object wmi activex data object
   

Windows Scripting Host allgemein

Allgemeine Dinge, die man immer wieder für Scripte benötigt.

  • Array
  • Case Select
  • Datumsprüfung und Wochentagausgabe
  • Dialogbox mit Frage
  • kleine Abfrage
  • Parameteraufruf
  • Rechenoperationen
  • Runden
  • Schaltjahrtest
  • Schleife do...until
  • Schleife for ... next
  • Schleife while
  • Scriptbeispiel - Geburtstagsmeldedienstprogramm
  • Scriptbeispiel - Ordnerauswahl
  • String in Zeichenkette finden
  • String splitten
  • Text ersetzen
  • Textstring bearbeiten
  • verschiedene Messageboxes
  • Zufallszahl



    Array

    Ein Array ist eine Art Behälter,
    in den Werte gespeichert werden können.

    ' Array mit 4 Werten (0 bis 3)
    dim zahl(3)
    zahl(0) = "null"
    zahl(1) = "eins"
    zahl(2) = "zwei"
    zahl(3) = "drei"
    li = "Array zahl " & vbcr & "von" & vbcr
    li = li & (LBound(zahl) & " -> " & zahl(LBound(zahl)))
    li = li & vbcr & "bis" & vbcr
    li = li & (UBound(zahl) & " -> " & zahl(UBound(zahl)))
    MsgBox(li)
    ' Array mit 6 Werten (0 bis 5),
    ' wobei das Array neu dimensioniert werden kann.
    ReDim liste(5)
    liste(0) = "Anton"
    liste(1) = "Bert"
    liste(2) = "Charly"
    liste(3) = "Dieter"
    liste(4) = "Egon"
    liste(5) = "Fred"
    li = "Array liste " & vbcr & "von" & vbcr
    li = li & (LBound(liste) & " -> " & liste(LBound(liste)))
    li = li & vbcr & "bis" & vbcr
    li = li & (UBound(liste) & " -> " & liste(UBound(liste)))
    MsgBox(li)
    ' Array wurde neu dimensioniert,
    ' nun können 11 Werte gespeichert werden.
    ' Der Befehl preserve sorgt dafür, dass die alten Werte 0 bis 5
    ' beibehalten werden.
    ReDim Preserve liste(10)
    liste(6) = "Gustav"
    liste(7) = "Hans"
    liste(8) = "Ingo"
    liste(9) = "Jens"
    liste(10) = "Karl"
    li = "Array liste nach ReDim" & vbcr & "von" & vbcr
    li = li & (LBound(liste) & " -> " & liste(LBound(liste)))
    li = li & vbcr & "bis" & vbcr
    li = li & (UBound(liste) & " -> " & liste(UBound(liste)))
    MsgBox(li)
    ' Mehrdimensionales Array mit zwei Dimensionen
    ' 6 Werte können gespeichert werden.
    Dim tabelle(1,2)
    tabelle(0,0) = "A1"
    tabelle(0,1) = "B1"
    tabelle(0,2) = "C1"
    tabelle(1,0) = "A2"
    tabelle(1,1) = "B2"
    tabelle(1,2) = "C2"
    li = "Mehrdimensionales Array tabelle" & vbcr
    For i = 0 to UBound(tabelle,1)
    For j = 0 to UBound(tabelle,2)
    li = li & i & "/" & j & " -> " & tabelle(i,j) & vbcr
    Next
    Next
    MsgBox(li)

    Stand: 30.07.2006

    [zurück]

    Case Select

    Dieses Script ist ein Beispiel für einen Case Select.
    Mit dem Case Select kann man einfach eine Auswahl treffen und
    entsprechend Code ausführen.

    zahl = 3
    Select Case zahl
    Case 4:
    msgbox(zahl)
    msgbox("weiter")
    Case 1,2,3:
    msgbox("Die Zahl lautet: " & zahl & " !")
    Case Else:
    msgbox("keine Auswahl")
    End Select

    Stand: 18.08.2006

    [zurück]

    Datumsprüfung und Wochentagausgabe

    Diese Skript prüft, ob Sie ein korrektes Datum eingeben und
    gibt dann den Wochentag und das aktuelle Datum aus.

    datumeingabe = inputbox("Geben Sie bitte ein Datum ein (Jahr-Monat-Tag): ")
    if isdate(datumeingabe) then
    liste = "Ihre Eingabe: " & datumeingabe & vbcr & "Tag: " & day(datumeingabe)
    liste = liste & vbcr & "Monat: " & month(datumeingabe) & vbcr & "Jahr: "
    liste = liste & year(datumeingabe) & vbcr
    liste = liste & "Wochentag: " & weekdayname(weekday(datumeingabe)) & vbcr
    else
    liste = liste & "Sie haben kein korrektes Datum eingegeben." & vbcr
    end if
    liste = liste & vbcr & "Heute ist " & weekdayname(weekday(date)) &", der "& now & vbcr
    liste = liste & "Datum: " & date & vbcr & "Zeit: " & time & vbcr
    msgbox liste

    Stand: 13.10.2005

    [zurück]

    Dialogbox mit Frage

    nachricht = "HALLO WELT" & vbcr & vbcr & "Dies ist eine kleine Testbox!" & vbcr
    nachricht = nachricht & "Viel Spaß damit."& vbcr & vbcr
    nachricht = nachricht & "Soll der Test gestartet werden? "& vbcr & vbcr
    antwort = MsgBox(nachricht, vbQuestion+vbYesNo)
    if antwort=vbNo then msgbox("Kein Test."): WScript.quit
    msgbox ("Dies ist eine Testnachricht!" & vbcr & "Das war's.")

    Stand: 13.10.2005

    [zurück]

    kleine Abfrage

    frage = inputbox("Bitte Namen eingeben: ", "Namensabfrage", "Max Mustermann")
    if frage = cancel then wscript.quit
    msgbox "Sie heißen " & frage & "."

    Stand: 13.10.2005

    [zurück]

    Parameteraufruf


    Dieses Script liest die Parameter aus, die beim Starten mitgegeben wurden.
    z.B. test.vbs Anton geheim

    set oArgs = Wscript.Arguments
    If oArgs.Count > 0 Then
    user = oArgs.item(0)
    passwort = oArgs.item(1)
    msgbox (user & " und " & passwort)
    else
    msgbox("Keine Parameter mitgegeben. Aufruf mit test.vbs user passwort")
    end if

    Stand: 28.03.2006

    [zurück]

    Rechenoperationen

    a= inputbox ("Zahl a eingeben: ")
    b= inputbox ("Zahl b eingeben: ")
    summe = 0 + a + b
    subtraktion = a - b
    produkt = a * b
    division = a / b
    liste = "Zahl a: " & a & vbcr & "Zahl b: " & b & vbcr & vbcr _
    & "Summe: " & summe & vbcr & "Produkt: " & produkt & vbcr & "Division: "
    liste = liste & division & vbcr & "Subtraktion: " & subtraktion & vbcr
    msgbox liste

    Manchmal gibt es ein kleines Problem bei der Summenbildung,
    da der Computer die Zahlen a und b, wenn das Zeichen "+" steht,
    manchmal verknüpft statt addiert. Wenn man nun aber noch eine 0 hinzu addiert,
    ist dem Computer die Rechenoperation Addition auf jeden Fall klar.

    Stand: 13.10.2005

    [zurück]

    Runden

    Dieses Script rundet eine Zahl auf bzw. ab.

    zahl = 1.456453
    msgbox(zahl & " wird auf 0 Nachkommastellen gerundet: " & round(zahl,0) & vbcr _
    & zahl & " wird auf 1 Nachkommastelle gerundet: " & round(zahl,1) & vbcr _
    & zahl & " wird auf 2 Nachkommastellen gerundet: " & round(zahl,2) & vbcr _
    & zahl & " wird auf 3 Nachkommastellen gerundet: " & round(zahl,3) & vbcr _
    & zahl & " wird auf 4 Nachkommastellen gerundet: " & round(zahl,4) )

    Stand: 29.07.2006

    [zurück]

    Schaltjahrtest

    Bei diesem Skript geben Sie eine Jahreszahl ein und
    das Programm prüft dieses Jahr, ob es ein Schaltjahr ist.
    Die Berechnung kann bis ins Jahr 3999 durchgeführt werden.
    Das Skript berücksichtig auch Jahrhundertschaltjahre.

    jahr = inputbox("Geben Sie ein Jahr ein: (1-3999)","Schaltjahrtest",year(date))
    tg = 28
    pruefung = jahr / 100
    pruef = pruefung - left(pruefung, 2)
    if pruef = 0 then
    pruefung = jahr / 400
    pruef = pruefung - left(pruefung, 1)
    if pruef = 0 then tg = 29
    else
    pruefung = jahr / 4
    pruef = pruefung - left(pruefung, 3)
    if pruef = 0 then tg = 29
    end if
    if tg = 29 then
    msgbox (jahr & " ist ein Schaltjahr und der Februar hat "& tg & " Tage.")
    else
    msgbox (jahr & " ist kein Schaltjahr und der Februar hat "& tg & " Tage.")
    end if

    Stand: 13.10.2005

    [zurück]

    Schleife do...until

    do
    test = test + 1
    msgbox ("Dies ist Testnummer: " & test)
    loop until test > 9

    Stand: 17.08.2006

    [zurück]

    Schleife for ... next

    for test = 1 to 10
    msgbox ("Dies ist Testnummer: " & test)
    msgbox "Hallo"
    next

    Stand: 17.08.2006

    [zurück]

    Schleife while

    while (i<10)
    i = i + 1
    msgbox "Klick " & i & " von 10",vbinformation
    wend

    Stand: 18.08.2006

    [zurück]

    Scriptbeispiel - Geburtstagsmeldedienstprogramm

    Dieses Programm braucht zusatzliche eine "liste.txt" Datei,
    in der die Namen und die Geburtstage hineingepflegt werden.
    Zuerst muß in der 1. Zeile der Textdatei die Anzahl der Datensätze stehen.
    In der nächsten Zeile der Namen und in der folgenden Zeile dann das Geburtstdatum.
    Bei der Eingabe des Datums müssen sie sich nach der Einstellung des Systemdatums richten.
    Momentan ist das Programm auf 300 Datensätze beschränkt, man kann diese aber noch erhöhen,
    indem man im Quelltext des Programmes, die am Anfang stehenden 300er Zahlen auf den entsprechenden Wert setzt.

    ' Geburtstagsmeldedienst-Programm
    ' 25.02.2000
    dim name(300)
    dim datum(300)
    dim jahr(300)
    dim gebkind(300)
    dim gebtag(300)
    dim differenz(300)
    ' Momentan können nur 300 Datensaetze bearbeitet werden, wenn sie
    ' mehr bearbeiten wollen, müssen sie die oben stehende Zahl ändern.
    ' _________________________________________________________
    ' Einlesen der Datensaetze
    set fs= CreateObject("scripting.filesystemobject")
    datei="liste.txt"
    set dateiinhalt = fs.opentextfile(datei)
    anzahl = dateiinhalt.readline
    for einlesen = 1 to anzahl
    name(einlesen) = dateiinhalt.readline
    datum(einlesen) = dateiinhalt.readline
    next
    dateiinhalt.close
    'Datenspeicher von gebkind und gebtag auf leer setzen
    zaehler = 0
    for x = 1 to anzahl
    gebkind(anzahl) = "leer"
    gebtag(anzahl) = 0
    next
    ' Berechnung
    for x = 1 to anzahl
    if (month(datum(x))-month(date)) > -1 then
    if (month(datum(x))-month(date)) < 2 then
    if (month(datum(x))-month(date)) = 0 then
    if (day(datum(x))-day(date)) > -1 then
    if (day(datum(x))-day(date)) < 11 then
    tag = (day(datum(x))-day(date))
    zaehler=zaehler + 1
    gebkind(zaehler) = name(x)
    gebtag(zaehler) = datum(x)
    differenz(zaehler) = (day(gebtag(zaehler))-day(date))
    end if
    end if
    else
    tg = 100
    if month(date) = 1 then tg=31
    if month(date) = 2 then
    ' Schaltjahrproblem
    tg=28
    pruefung = year(date) / 100
    pruef = pruefung - left(pruefung, 2)
    if pruef = 0 then
    pruefung = year(date) / 400
    pruef = pruefung - left(pruefung, 1)
    if pruef = 0 then tg = 29
    else
    pruefung = year(date) / 4
    pruef = pruefung - left(pruefung, 3)
    if pruef = 0 then tg = 29
    end if
    end if
    if month(date) = 3 then tg=31
    if month(date) = 4 then tg=30
    if month(date) = 5 then tg=31
    if month(date) = 6 then tg=30
    if month(date) = 7 then tg=31
    if month(date) = 8 then tg=31
    if month(date) = 9 then tg=30
    if month(date) = 10 then tg=31
    if month(date) = 11 then tg=30
    if month(date) = 12 then tg=31
    if tg = 31 then
    if ((31+(day(datum(x))))-day(date)) < 11 then
    zaehler = zaehler + 1
    gebkind(zaehler) = name(x)
    gebtag(zaehler) = datum(x)
    differenz(zaehler) = ((day(gebtag(zaehler))+31)-day(date))
    end if
    end if
    if tg = 30 then
    if ((30+(day(datum(x))))-day(date)) < 11 then
    zaehler = zaehler + 1
    gebkind(zaehler) = name(x)
    gebtag(zaehler) = datum(x)
    differenz(zaehler) = ((day(gebtag(zaehler))+30)-day(date))
    end if
    end if
    if tg < 30 then
    if ((tg+(day(datum(x))))-day(date)) < 11 then
    zaehler = zaehler + 1
    gebkind(zaehler) = name(x)
    gebtag(zaehler) = datum(x)
    differenz(zaehler) = ((day(gebtag(zaehler))+tg)-day(date))
    end if
    end if
    end if
    end if
    end if
    next
    ' Ausgabe
    liste="Heute ist "&weekdayname(Weekday(date))&", der "& date & "." & vbcr
    if zaehler > 0 then
    for ord = 1 to zaehler
    for ordnung = 1 to zaehler
    if differenz(ord) < differenz(ordnung) then
    diff = differenz(ord)
    differenz(ord) = differenz(ordnung)
    differenz(ordnung) = diff
    diff = gebkind(ord)
    gebkind(ord) = gebkind(ordnung)
    gebkind(ordnung) = diff
    diff = gebtag(ord)
    gebtag(ord) = gebtag(ordnung)
    gebtag(ordnung) = diff
    end if
    next
    next
    for e = 1 to zaehler
    zaehler= zaehler - 1
    if differenz(e) = 0 then liste = liste & vbcr & "Heute hat "& gebkind(e) &" Geburtstag. "& gebtag(e)
    if differenz(e) = 1 then liste = liste & vbcr & "Morgen hat "& gebkind(e) & " Geburtstag. "& gebtag(e)
    if differenz(e) > 1 then liste = liste & vbcr & "In " & differenz(e) & " Tagen hat " & gebkind(e) & " Geburtstag. " & gebtag(e)
    next
    end if
    meldung = MsgBox(liste, vbInformation+vbOkay,"Geburtstagsmeldedienst")

    Und nun noch ein Beispiel für eine Geburtstagsliste, speichern unter "liste.txt"
    in das selbe Verzeichnis, wie das Visual Basic Programm. Mein Tip noch,
    das Programm in den Autostart von Windows legen und
    sie werden bei jedem Neustart über aktuelle Geburtstage informiert.

    7
    Person A
    1978-03-01
    Person B
    1945-07-10
    Person C
    1963-02-19
    Person D
    1921-03-01
    Person E
    1985-02-28
    Person F
    1936-08-05
    Person G
    1948-04-24

    Stand: 13.10.2005

    [zurück]

    Scriptbeispiel - Ordnerauswahl

    set shell = CreateObject("Shell.Application")
    laufwerk = inputbox ("Bitte wählen Sie ein Laufwerk aus:","Laufwerkauswahl","c:")
    MsgBox shell.BrowseForFolder(0, "Bitte wählen Sie einen Ordner aus", 0,laufwerk)

    *** Achtung:
    Dieses Skript ist noch nicht ganz ausgereift,
    wenn man beim Auswählen auf "abbrechen" wählt, stürzt es ab.

    Stand: 13.10.2005

    [zurück]

    String in Zeichenkette finden

    Dieses Script ermittelt die Stelle, an der ein String in einer Zeichenkette beginnt.

    zeichenkette = "Windows Scripting Host"
    string1 = "Script"
    string2 = "h"
    string3 = "VBS"
    stelle1 = InStr(1,zeichenkette, string1,1)
    stelle2 = InStr(1,zeichenkette, string2,1)
    stelle3 = InStr(1,zeichenkette, string2,0)
    stelle4 = InStr(1,zeichenkette, string3,1)
    stelle5 = InStr(15,zeichenkette, string1,1)
    msgbox(string1 & " an " & stelle1 & " gefunden")
    msgbox(string2 & " an " & stelle2 & " gefunden")
    msgbox(string3 & " an " & stelle3 & " nicht gefunden")
    msgbox(string2 & " an " & stelle4 & " nicht gefunden")
    msgbox(string1 & " an " & stelle5 & " nicht gefunden")

    Mit InStr wird die Stelle eines einzelnen Buchstaben oder eines Strings ausgegeben,
    an der dieser beginnt.
    Wenn der zu suchende String nicht vorhanden ist, wird der Wert 0 ausgegeben.

    Syntax:
    Instr([Ab zu suchender Stelle],[Quelle],[Suche],[Groß-/Kleinschreibung])

    Stand: 17.08.2006

    [zurück]

    String splitten


    Dieses Script teilt einen String in einzelne Teile auf,
    die durch ein bestimmtes Trennzeichen getrennt wurden.

    liste = "1;2;3;4;5;6;7"
    InputData = Split(liste, ";")
    For each strData In InputData
    text = strData
    msgbox(text)
    next

    Stand: 28.03.2006

    [zurück]

    Text ersetzen

    text = "Dies ist ein Test."
    ausgabe = Replace(text, "ein Test", "abgeschlossen",1,-1,1)
    msgbox ausgabe

    Parameter:
    Originaltext [text]
    alter Text ["ein Test"]
    neuer Text ["abgeschlossen"]
    Textersetzungsanfang [1] -> optional
    Anzahl der Textersetzung [-1] -> alle ersetzen
    Klein- und Grosschreibung beachten [1] = nicht beachten [0] = beachten -> optional

    Stand: 13.10.2005

    [zurück]

    Textstring bearbeiten

    a = "HallO1"
    msgbox(mid(a,2,3))
    msgbox len(a)
    msgbox left(a,2)
    msgbox right(a,2)
    msgbox lcase(a)
    msgbox ucase(a)

    Dieses Skript bearbeitet den Textstring "HallO1" wie folgt:
    Die Funktion Mid() schneidet aus der Mitte einen Textstring heraus.
    Die Funtkion Len() gibt die Gesamtlänge des Textstring aus.
    Die Funtkion Left() schneidet von links x Zeichen aus.
    Die Funtkion Right() schneidet von rechts x Zeichen aus.
    Die Funtkion Lcase() stellt alle Zeichen des Textstrings auf Kleinebuchstaben um.
    Die Funtkion Ucase() stellt alle Zeichen des Textstrings auf Großbuchstaben um.

    Stand: 13.10.2005

    [zurück]

    verschiedene Messageboxes

    frage = msgbox("Beantworten sie bitte folgende Fragen!",vbOKonly,"Ok- Button")
    frage2 = msgbox("Weiter? ",vbOKCancel,"Ok- Cancel Button")
    frage3 = msgbox("Es ist ein Fehler im Programm aufgetreten. Wie wollen sie fortfahren? ",vbAbortRetryIgnore,"WARNING")
    frage4 = msgbox("Fortfahren? ",vbYesNoCancel,"Yes, No- Cancel Button")
    frage5 = msgbox("Wirklich? ",vbYesNo,"YesNo Botton")
    frage6 = msgbox("Nochmal? ",vbRetryCancel,"Wiederholen- Abbrechen")
    frage7 = msgbox("Weiter? ",vbyesno + vbQuestion ,"Question")
    frage8 = msgbox("Weiter? ",vbyesno + vbInformation ,"Information")
    frage9 = msgbox("Weiter? ",vbyesno + vbExclamation ,"Exclamation")
    frage10 = msgbox("Weiter? ",vbyesnocancel + vbCritical ,"Critical")
    msgbox "Normal"
    msgbox "Hinweis",vbInformation
    msgbox "Frage",vbQuestion
    msgbox "Wichtig",vbExclamation
    msgbox "Kritisch",vbCritical

    Stand: 18.08.2006

    [zurück]

    Zufallszahl

    Dieser Skript erzeugt und listet danach 10 Zufallszahlen zwischen 1 und 100 auf.

    von = 1
    bis = 100
    anzahlzahlen = 10
    randomize
    anzahl = bis - von + 1
    for x = 1 to anzahlzahlen
    zufall = fix(rnd*(anzahl))+von
    liste = liste & vbcr & zufall
    next
    msgbox(anzahlzahlen & " Zufallszahl zwischen "& von &" und "& bis &"."& vbcr & vbcr &"Zufallszahlen: "& liste)

    Stand: 13.10.2005

    [zurück]

  •    


    [home]

    [wsh-doku]

    [wsh allgemein]

    [wscript shell]

    [wscript network]

    [file system object]

    [wmi]

    [activex data object]

    [links]