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.
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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!"
Danke Drup.
Ich glaube soetwas meint er.
Ich werde es mal probieren und mich dann wieder melden
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.
Mist - du hast recht - werde mal nachschauen - hatte das offensichtlich nicht gut getestet :-(
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.
OK. Es klappt.
Danke nochmal für deine Mühe.
MfG Twister
gern gescheh'n :-)
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?
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
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
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
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.
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.
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.
Ü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
Hallo drup.
Sag mal funktioniert das Skript auch Netzwerkübergreifend?
Und was genau muß auf einem Rechner installiert sein um Skripte laufen zu lassen?
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 ...
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
' ----------------------------------------------
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
Hallo Forum nochmal,
das Script soll als Makro in Word laufen. Oder als vbs Script. Was bequemer für euch ist.
danke
voanewby