![]() |
[VBS]Fehlerbehandlung Mal was ganz neues heute... :mrgreen: Ich sitz hier grade vor nem VBScript, welches ein Netzlaufwerk verbindet, schön und gut, das funktioniert auch so weit. Jetzt muss das ganze allerdings so gebastelt werden, dass bei einem Verbindungsfehler ein Ja/Nein-Error erscheint. Beim Klick auf ja soll sich eine .bat mit einem Sicherungsskript öffnen, bei Klick auf nein soll eine .bat mit einem shutdown-Skript gestartet werden. [code]On Error Resume Next Set wn = WScript.CreateObject("WScript.Network") wn.MapNetworkDrive "o:", "[URL="file://\snaptemp"]\snaptemp[/URL]", False If Err.Number = -2147024843 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test.bat",1,True if a=vbNo then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test2.bat",1,True End If [/code] Das funktioniert im Großen und Ganzen schon ganz gut, das einzige Problem ist, dass sich bei einem Klick auf Ja beide Batches (in dem Fall Test und Test2) öffnen.....und ein shutdown während der Datensicherung ist eher schlecht. :inflames: Entweder da is jetz wirklich irgendein grober Fehler drin, oder ich steh aufm Schlauch, jedenfalls wäre es gut, wenn mir jemand verraten kann, wie ich das Problem beseitige. Thx und LG €: Man merkt vielleicht dass ich auf dem Gebiet nicht so der Profi bin, also bitte nich hauen wenn das ganze Ding Schei$e is, bin froh dass es jetz so funktioniert. :inflames: |
AW: [VBS]Fehlerbehandlung [code]On Error Resume Next Set wn = WScript.CreateObject("WScript.Network") wn.MapNetworkDrive "o:", "[URL="file://%5Csnaptemp"]snaptemp[/URL]", False If Err.Number = -2147024843 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test.bat",1,True [COLOR=Red][B]End If[/B][/COLOR] if a=vbNo then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test2.bat",1,True [COLOR=Red][B]End If[/B][/COLOR] End If [/code] So sollte es gehen! Du hast einfach vergessen, dass man die Kurzschreibweise der IF Anweisung nur dann ohne End If lassen darf, wenn nur eine Anweisung danach kommt! Und da Du jeweils 2 hast, welche unter die Bedingung fallen werden diese logischerweise gleich ausgeführt. Falls vbYesNo kein Cancel Button (oder ein X zu schließen der Message hat, kannst Du auch gleich mit Else arbeiten. (weiß ich jetzt nicht genau) Siehe hier: [url=http://www.asphelper.de/referenz/vbscript/if_then_else.asp]asphelper.de - VBScript - If...Then...Else[/url] |
AW: [VBS]Fehlerbehandlung Alles klar, werd ich dann morgen ausprobieren und hier Rückmeldung geben, Danke dir. Else funktioniert übrigens nicht. (zumindest nich wie ich es ausprobiert hab :>) |
AW: [VBS]Fehlerbehandlung Hmm..klappt leider auch nicht, er bringt mir dann ne Fehler, dass er bei dem vorletzten End If ne Anweisung erwartet.... Wenn ich die zweite batch mit else aufrufen will klappt das gar nicht. Also so: [code]On Error Resume Next Set wn = WScript.CreateObject("WScript.Network") wn.MapNetworkDrive "o:", "[URL="file://snap2temp"]snap2temp[/URL]", False If Err.Number = -2147024843 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test.bat",1,True else Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test2.bat",1,True End If[/code] |
AW: [VBS]Fehlerbehandlung So ich habe jetzt mal folgendes getestet: [code] On Error Resume Next If 1 <> 0 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShellA = WScript.CreateObject("WScript.Shell") oShellA.Run "C:Test.bat",1,True End If x=MsgBox("Nach a vbYes! a=" & a & ", vb=" & vbNo, vbYesNo) if a=vbNo then Set oShellB = WScript.CreateObject("WScript.Shell") oShellB.Run "C:Test2.bat",1,True End If End If [/code]Und das funktionierte auch. Existiert bei Dir die Datei "Test[B][COLOR=Red]2[/COLOR][/B].bat" auch? Weil die "2" hatte ich am Ende übersehen - und mich auch schon die ganze Zeit gewundert warum es so aussah, als ob es nicht funktionieren würde. Weil es kommt ja auch kein direkter Fehler. Folgendes habe ich auch noch getestet - und mit ein bisschen spielen auch Deinen Fehler gefunden: [code] On Error Resume Next If 1 <> 0 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShellA = WScript.CreateObject("WScript.Shell") oShellA.Run "C:Test.bat",1,True else Set oShellB = WScript.CreateObject("WScript.Shell") oShellB.Run "C:Test2.bat",1,True End If End If [/code]Dein Fehler ist, dass Du direkt hinter dem "Then" eine Anweisung schreibst! Damit wird kein "End IF" vom Compiler erwartet - und wenn da eins kommt, dann meckert er. Wenn Du also mehrere Anweisung in einem IF Zweig ausführen möchtest, dann musst Du die Anweisung auf die nächste Zeile schreiben und per "End If" bzw. "Else" (usw.) behandeln. Ich habe es nicht gleich gesehen, da ich VBS schon lange net mehr gemacht habe, und somit seine Eigenheiten auch nicht mehr im Kopf habe ;-) [U] Bitte Schreib es so:[/U] [B][COLOR=Red] falsch:[/COLOR][/B] [code] if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") ... [/code][COLOR=SeaGreen][B]richtig:[/B][/COLOR] [code] if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") ... [/code]Die Einrückung ist nicht notwendig - aber hilfreich um die Übersicht zu behalten - also gewöhn Dich am besten dran sowas zu machen ;-) |
AW: [VBS]Fehlerbehandlung Alles klar, werd mir das fürs nächste Skript mal im Hinterkopf behalten. ;) Beim aktuellen wurde nun die Anforderung vom Cheftechniker geändert. -.- Das ganze sieht jetz so aus: [code]On Error Resume Next rem <<- Netzlaufwerk verbinden ->> Set wn = WScript.CreateObject("WScript.Network") wn.MapNetworkDrive "o:", "\snaptemp", False rem <<- Überprüfung, ob Ziellaufwerk erreichbar ist ->> If Err.Number = -2147024843 then a=MsgBox("Ist der Netzwerkfehler behebbar?", vbCritical + vbYesNo, "Netzlaufwerk nicht erreichbar") if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test.bat",1,True if a=vbNo then WScript.Quit End If rem On Error Resume Next rem <<- Überprüfung, ob Laufwerk bereits benutzt wird. ->> If Err.Number = -2147024811 then a=msgbox("Laufwerk wird bereits benutzt, bitte Problem beheben und Programm neustarten.", vbCritical + vbOKOnly, "Ziellaufwerk wird bereits benutzt") if a=vbOk then WScript.Quit End If rem On Error Resume Next rem <<- Überprüfung, ob Netzwerk verfügbar ist ->> If Err.Number = -2147023665 then a=msgbox("Netzwerk nicht verfügbar, bitte Problem beheben und Programm erneut starten", vbCritical + vbOKOnly, "Netzwerk nicht bereit") if a=vbOk then WScript.Quit End if rem <<- Start des Sicherungsskripts ->> Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "C:Test.bat",1,True [/code] Und wurde als okay abgenickt. :D Was man als Praktikant nich alles zu tun bekommt, wenn im Laden nix los is.^^ Danke dir jedenfalls Exit! |
AW: [VBS]Fehlerbehandlung Einen Einwand hätte ich noch, muss man in VB nicht am Ende der Zeile einen Unterstrich (_) setzen, wenn der Befehl auf der nächsten Zeile weitergeht? |
AW: [VBS]Fehlerbehandlung [quote='[EID]-Mr.GiZMO;554704']Einen Einwand hätte ich noch, muss man in VB nicht am Ende der Zeile einen Unterstrich (_) setzen, wenn der Befehl auf der nächsten Zeile weitergeht?[/quote] Also es hat so wie es ist auf jeden Fall funktioniert, scheint also nicht so zu sein. |
| Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr. |
Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.