Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

VBSript Frage

TheTwister / 20 Antworten / Baumansicht Nickles

Hallo zusammen.
Suche für einen Kumpel ein VBSript das je nachdem wie Spät es ist eine Datei startet also zb. zwischen 6 u.12 Uhr datei1 und zwischen 12 u.18 Uhr datei2. Wenn es zb.8Uhr ist wird datei1 gestartet.

Ich hoffe ich habe mich verständlich genug ausgedrückt.
Vielen Dank im vorraus.

Ich habe keine Signatur !!!
bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Hier ein Vorschlag:


' ----------------------------------------------
' check time
' programm je nach zeit starten
' ----------------------------------------------
option explicit

Dim jetzt
Dim sMldg
Dim WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")

jetzt = Time
sMldg = "Verarbeitung gestartet am " & Date & " um " & jetzt & "."
MsgBox sMldg, , "!check time!"

' -- Fall 1, als Beispiel den Notepad starten
If jetzt >= 0 And jetzt    MsgBox "Fall 1, hier startet Programm xy ..."
   ' mit "True" wartet das Skript, bis der Notepad wieder
   ' geschlossen wird
   WshShell.Run "Notepad", 1, True
End If

' -- Fall 2
If jetzt > 12 And jetzt    MsgBox "Fall 2 ..."
End If

jetzt = Time
sMldg = "Verarbeitung beendet um " & jetzt & "."
MsgBox sMldg, , "!check time!"

bei Antwort benachrichtigen
TheTwister Nachtrag zu: „VBSript Frage“
Optionen

Danke Drup.
Ich glaube soetwas meint er.
Ich werde es mal probieren und mich dann wieder melden

Ich habe keine Signatur !!!
bei Antwort benachrichtigen
TheTwister Nachtrag zu: „VBSript Frage“
Optionen

Ist eigentlich perfekt

Wenn ich bei Fall2 ein anderes Programm eintrage und das Script nach 12 starte wird trotzdem
das Programm bei Fall1 ausgeführt.

Ich habe keine Signatur !!!
bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Mist - du hast recht - werde mal nachschauen - hatte das offensichtlich nicht gut getestet :-(

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Ok, ich hab's korrigiert:

ersetze:
jetzt = Time
sMldg = "Verarbeitung gestartet am " & Date & " um " & jetzt & "."
MsgBox sMldg, , "!check time!"

durch:
jetzt = Time
jetzt = Mid(jetzt,1,2)
sMldg = "Verarbeitung gestartet, Stunde: " & jetzt
MsgBox sMldg, , "!check time!"

--> von der Zeit (jetzt) werden jetzt nur die ersten zwei Stellen (die Stunden) genommen, so funktioniert's.

bei Antwort benachrichtigen
TheTwister Nachtrag zu: „VBSript Frage“
Optionen

OK. Es klappt.

Danke nochmal für deine Mühe.

MfG Twister

Ich habe keine Signatur !!!
bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

gern gescheh'n :-)

bei Antwort benachrichtigen
mdevils TheTwister „VBSript Frage“
Optionen

Hallo Leute
Ich hoffe mir kann jemand helfen...
Würde gern mal wissen ob man alternativ zum dir Befehl Verzeichnisse und deren Unterverzeichnisse inklusive Inhalt auslesen kann und das per vbs script.
Was ich bräuchte wäre der Dateiname und Datum + eventuell Uhrzeit.
Kann mir da jemand helfen?

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Hier schon mal der Link auf die Doku zum skripten mit VBScript, gefunden bei http://dieseyer.de, Doku von microsoft:

http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/DE/scd56de.exe

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Also, hier ist ein Script, das die Auflistung der Unterverzeicnisse und Dateien in eine Textdatei schreibt:

' ----------------------------------------------
' dirAuflistung
' Verzeichnisse und Dateien anzeigen
' 20.06.2004 D.Ruprecht
' ----------------------------------------------
Option Explicit

Dim fso
Dim fOut
Dim WshShell
Dim sCurDir
Dim sPfad
Dim sParentDir

' Objekte initialisieren
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

' Verzeichnis angeben lassen
sParentDir = InputBox("Verzeichnis angeben:", _
                      "Verzeichnisinhalt auflisten", "C:\Temp")
If sParentDir = "" Then
   MsgBox "Kein Verzeichnis angegeben."
   WScript.Quit
End If

' Outputdatei öffnen
sCurDir = WshShell.CurrentDirectory
sPfad = fso.BuildPath(sCurDir, "dir.txt")
Set fOut = fso.OpenTextFile(sPfad, 2, True) ' 2 = ForWriting
fOut.Write "Verzeichnis von " & sParentDir & vbCrLf & vbCrLf

' Liste erzeugen
Call DateilisteAnzeigen(sParentDir, 0)

' Ende
fOut.Close
MsgBox "Verzeichnis wurde geschrieben nach: " & sPfad

' ----------------------------------------------------
Function DateilisteAnzeigen(ordnerAngabe, tiefe)
' ----------------------------------------------------
Dim oParent       ' As Folder
Dim oFolders      ' As folders
Dim oFiles       ' As files
Dim fo            ' As Folder
Dim fi            ' As file
Dim sList         ' As String
   
   ' Liste beginnt mit Verzeichnis
   Set oParent = fso.GetFolder(ordnerAngabe)
   sList = Space(tiefe) & oParent.Name
   sList = sList & Space(60 - Len(sList)) & oParent.DateLastModified
   sList = sList & vbCrLf
   fOut.Write sList
   
   ' hier geht's rekursiv los: für alle Unterverzeichnisse
   ' diese Funktion nochmal aufrufen (das geht!)
   Set oFolders = oParent.SubFolders
   For Each fo In oFolders
      Call DateilisteAnzeigen(fo, tiefe + 3)
      fOut.Write vbCrLf
   Next
   
   'und jetzt noch die Files im Verzeichnis:
   Set oFiles = oParent.files
   For Each fi In oFiles
      sList = Space(tiefe + 3) & fi.Name
      sList = sList & Space(60 - Len(sList)) & fi.DateLastModified
      sList = sList & vbCrLf
      fOut.Write sList
   Next
End Function

bei Antwort benachrichtigen
mdevils drup „Also, hier ist ein Script, das die Auflistung der Unterverzeicnisse und Dateien...“
Optionen

Vielen Dank
Leider käuft es noch nicht ganz rund.
Wenn ich zum Beispiel auf meiner Platte E: ein größeren Baum auslesen lassen will kommt eine Fehlermeldung und in der dir.txt steht nur das erste Verzeichniss und nix weiter.
Folgender Fehler:
skript: E:\verzeichnisse.vbs
Zeile: 69
Zeichen:7
Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument: 'Space'
Code 800A0005
Quelle: Laufzeitfehler in Microsoft VBScript

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Ok. Zeile 69 ist:
sList = sList & Space(60 - Len(sList)) & fi.DateLastModified

--> anscheinend ist dein Pfad länger als 60 Zeichen, 60 - Len(sList) wird wahrscheinlich negativ, und das darf nicht sein.

--> Aenderung: nimm statt 60 in Space(60 - Len(sList)) mal z.B. 80, oder auch 100.

Bedeutung dieser Zahl: Abstand (in Zeichen) vom linken Rand für Datum/Zeit.

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Noch ein Tipp, für einen grösseren (tieferen) Baum: mit "tiefe" wird jedes Unterverzeichnis weiter nach rechts eingerückt, und zwar im Aufruf

Call DateilisteAnzeigen(fo, tiefe + 3)

--> wenn das zu weit nach rechts geht, dann z.B. nur "tiefe + 1" setzen.

bei Antwort benachrichtigen
mdevils drup „Noch ein Tipp, für einen grösseren tieferen Baum: mit tiefe wird jedes...“
Optionen

Tausend Dank,
funktioniert hundert prozentig.
Und auch danke für den weiteren Tip. Ich steck ja noch in den Kinderschuhen was Skripten angeht aber dank der Beschreibungen in den einzelnen Abläufen wird es gut verständlich.
Ich hoffe ich erreiche auch mal dieses Niveau in Bezug auf Skripten.
Bin auch schon fleißig am Windows Script Host 2.0 Developer's Guide lesen. Gibt es da vieleicht auch noch Alternativen?

Und eine Frage hätte ich noch.
Kann man auch eine Übernahme nach Excle zum Beispiel implementieren.
Denn das Format bietet sich ja an den Inhalt sauber nach Excel zu bringen.

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Übernahme nach Excel implementieren: ja, kann man, die Objekt von Excel, also z.B. die Zeilen und Spalten auf einem Excel-Tabellenblatt, können angesprochen werden - ist aber ein klein wenig komplizierter, werde mal ein Beispiel suchen ...

Für den Moment noch ein Tipp zum Entwickeln mit VBScript: das Skript in VBA entwickeln, also z.B. innerhalb von Word oder Excel.

Weg: Excel starten (leere Arbeitsmappe), unter Extras --> Makro den Visual-Basic-Editor öffnen. In der Liste links "Diese Arbeitsmappe" doppelklicken --> rechts wird ein Programmfenster geöffnet.

Darin jetzt den Code erfassen. Unterschied zu VBScript: in VBA muss auch das Hauptprogramm in einer Funktion drin definiert werden.

Vorteil: es werden schlauere Fehlermeldungen angezeigt, und der Debugger springt auf die Zeile, die ein Problem macht. Und: wenn unter Extras --> Verweise die entsprechenden Libraries angehakt sind, kann man mit F2 direkt eine Liste der Objekte / Eigenschaften etc. anzeigen lassen. Libraries: Windows Script Host Object Model, und Microsoft Scripting Runtime.

Ausserdem: wenn bei "Dim" der Datentyp richtig angegeben worden ist, kann man die Variable schreiben und den Punkt setzen --> eine Liste mit Methoden und Eigenschaften erscheint.
Hier das Programm, wie ich es in VBA entwickelt habe - für VBScript müssen die "as ..." nach dem "Dim" weg:

Option Explicit

Dim fso As FileSystemObject
Dim fout As TextStream

Function dirListe()
Dim WshShell      As WshShell
Dim sCurDir       As String
Dim sPfad         As String
Dim sParentDir    As String

' Objekte initialisieren
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

' Verzeichnis angeben lassen
sParentDir = InputBox("Verzeichnis angeben:", _
                      "Verzeichnisinhalt auflisten", "C:\Temp")
If sParentDir = "" Then
   MsgBox "Kein Verzeichnis angegeben."
   Exit Function
End If

' Outputdatei öffnen
sCurDir = WshShell.CurrentDirectory
sPfad = fso.BuildPath(sCurDir, "dir.txt")
Set fout = fso.OpenTextFile(sPfad, ForWriting, True)
fout.Write "Verzeichnis von " & sParentDir & vbCrLf & vbCrLf

' Liste erzeugen
Call DateilisteAnzeigen(sParentDir, 0)

' Ende
fout.Close
MsgBox "Verzeichnis wurde geschrieben nach: " & sPfad

End Function

Function DateilisteAnzeigen(ordnerAngabe, tiefe)
Dim oParent       As Folder
Dim oFolders      As folders
Dim oFiles       As files
Dim fo            As Folder
Dim fi            As file
Dim sList         As String
   
   ' Liste beginnt mit Verzeichnis
   Set oParent = fso.GetFolder(ordnerAngabe)
   sList = Space(tiefe) & oParent.Name
   sList = sList & Space(60 - Len(sList)) & oParent.DateLastModified
   sList = sList & vbCrLf
   fout.Write sList
   
   'hier geht's rekursiv los:
   'für alle Unterverzeichnisse die Funktion nochmal aufrufen ...
   Set oFolders = oParent.SubFolders
   For Each fo In oFolders
      Call DateilisteAnzeigen(fo, tiefe + 3)
      fout.Write vbCrLf
   Next
   
   'und jetzt noch die Files im Verzeichnis:
   Set oFiles = oParent.files
   For Each fi In oFiles
      sList = Space(tiefe + 3) & fi.Name
      sList = sList & Space(60 - Len(sList)) & fi.DateLastModified
      sList = sList & vbCrLf
      fout.Write sList
   Next
End Function

bei Antwort benachrichtigen
mdevils drup „Übernahme nach Excel implementieren: ja, kann man, die Objekt von Excel, also...“
Optionen

Hallo drup.
Sag mal funktioniert das Skript auch Netzwerkübergreifend?
Und was genau muß auf einem Rechner installiert sein um Skripte laufen zu lassen?

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Hallo mdevils

Netzwerkübergreifend:
a) auslesen / auflisten von Verzeichnissen in einem Netzwerk sollte problemlos möglich sein - würde mich interessieren, wenn's da Probleme gäbe, mir ist nichts bekannt

b) Aufruf des Skripts über einen Netzwerkpfad: auch das müsste möglich sein - allerdings ist es wohl einfacher, das (kleine) Skript auf den entsprechenden Rechner zu kopieren.

--> das führt aber zur Frage, was installiert sein muss, damit ein VBScript läuft: Ist einfach zu beantworten - es braucht Windows mit installiertem Windows Script Host.

Den Windows Script Host (WSH), früher Windows Scripting Host genannt, hat Microsoft zum ersten Mal mit Windows 98 mitgeliefert. (Für 95 kann er soviel ich weiss nachinstalliert werden.)

Und der WSH besteht als Programm im wesentlichen aus zwei Dateien: Wscript.exe führt ein Skript als Windows-basierender Host aus, während Cscript.exe das Skript in einem DOS-Fenster laufen lässt.

Noch etwas mehr Information im deutschsprachigen Artikel bei Microsoft:
http://support.microsoft.com/default.aspx?scid=kb;de;232211

Wegen dem direkten Schreiben nach Excel bin ich noch nicht dazu gekommen, ein Beispiel zu suchen, kommt aber noch ...

bei Antwort benachrichtigen
drup TheTwister „VBSript Frage“
Optionen

Schreiben nach Excel aus VBScript: für die Ansteuerung der Excel-Objekt (Worksheet, Zellen, auch Formatieren etc.) am besten in VBA in Excel selber schauen, ev. Makros aufzeichnen und schauen wie die aussehen, oder Hilfe in VBA in Excel.

Hier ein Beispiel für den WSH (VBScript):

Option Explicit

Dim appExcel
Dim xlsOutput
Dim ws
Dim einWort
Dim i
Dim WshShell
Dim fso
Dim sCurDir
Dim sPfad

' Instanz von Excel der Objektvariablen zuweisen
Set appExcel = CreateObject("Excel.Application")

' neues Excel-Objekt erstellen und sichtbar machen
Set xlsOutput = CreateObject("Excel.Sheet")
xlsOutput.Application.Visible = True

' Ojekt für aktuelles Tabellenblatt setzen
Set ws = xlsOutput.ActiveSheet

' Nach Excel schreiben
ws.Range("A1").Value = "Hier kommen die Zahlen 1 - 10:"

' Schreiben mit Loop:
For i = 1 to 10
   ws.Cells(i+1, 1) = i
Next

' aktuelle Verzeichnis bestimmen
Set WshShell = CreateObject("WScript.Shell")
sCurDir = WshShell.CurrentDirectory

' Pfad zum Speichern zusammensetzen
Set fso = CreateObject("Scripting.FileSystemObject")
sPfad = fso.BuildPath(sCurDir, "DatenAusWord")

' neue Exceldatei speichern
xlsOutput.SaveAs (sPfad)

' Objekte freigeben
Set xlsOutput = Nothing

' ----------------------------------------------

bei Antwort benachrichtigen
vbanewby TheTwister „VBSript Frage“
Optionen

hallo,

das ist schon fast genaud das was ich suche, allerdings klitzekleine Änderungen. Ich würde mich freuen, wenn die jemand umsetzen könnte: (vom Script ganz oben)

1) statt dieses Parts

' Verzeichnis angeben lassen
sParentDir = InputBox("Verzeichnis angeben:", _
"Verzeichnisinhalt auflisten", "C:Temp")
If sParentDir = "" Then
MsgBox "Kein Verzeichnis angegeben."
WScript.Quit
End If

hätte ich gern eine feste Variable am anfang des Scripts,

gut währe auch, wenn ich nur den dateinamen mit endung aufgelistet bekomme, also beispielsweise eins.doc, zwei.doc usw.

perfekt währe es, wenn ich obendrei vielleicht (ebenfalls oben im script) die endung der auzulistenden Dateien angeben könnte, z.B. nur *.docs!

und das letzte: wenn ich wählen könnte, ob eine *.txt datei generiert werden soll oder ein *.xls

Da ich wirklich gar kein VBA VB oder ähnliches kann, bin ich für jede Hilfe dankbar.

das währe echt klasse

danke danke danke

vbanewby


bei Antwort benachrichtigen
vbanewby TheTwister „VBSript Frage“
Optionen

Hallo Forum nochmal,

das Script soll als Makro in Word laufen. Oder als vbs Script. Was bequemer für euch ist.

danke

voanewby

bei Antwort benachrichtigen