Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   [VBS]Fehlerbehandlung (https://www.tweakpc.de/forum/programmiersprachen/57011-vbs-fehlerbehandlung.html)

Killerpixel 04.06.2008 12:20

[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:

Exit 04.06.2008 15:57

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]

Killerpixel 04.06.2008 16:03

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 :>)

Killerpixel 05.06.2008 08:19

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]

Exit 05.06.2008 15:46

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 ;-)

Killerpixel 05.06.2008 15:55

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!

[EID]-Mr.GiZMO 07.06.2008 15:46

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?

Killerpixel 07.06.2008 15:55

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.