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:", "\snaptemp", 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
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.
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.
Das Motto der Minensucher: Wer suchet, der findet. Wer drauftritt verschwindet.
Geändert von Killerpixel (04.06.2008 um 12:31 Uhr)
On Error Resume Next
Set wn = WScript.CreateObject("WScript.Network")
wn.MapNetworkDrive "o:", "snaptemp", 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
End If
if a=vbNo then
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "C:Test2.bat",1,True
End If
End If
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)
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:", "snap2temp", 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
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
Und das funktionierte auch.
Existiert bei Dir die Datei "Test2.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
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
Bitte Schreib es so:
falsch:
Code:
if a=vbYes then Set oShell = WScript.CreateObject("WScript.Shell")
...
richtig:
Code:
if a=vbYes then
Set oShell = WScript.CreateObject("WScript.Shell")
...
Die Einrückung ist nicht notwendig - aber hilfreich um die Übersicht zu behalten - also gewöhn Dich am besten dran sowas zu machen
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
Und wurde als okay abgenickt.
Was man als Praktikant nich alles zu tun bekommt, wenn im Laden nix los is.^^
Darf ich mal bitte vorbei?! Das geht nach Kompetenz... Danke! | | | Einmal dachte ich, ich hätte Unrecht. Hab mich aber getäuscht!
"Es ist gelogen, dass Videogames Kids beeinflussen. Hätte Pacman das getan, würden wir heute durch dunkle Räume irren, Pillen fressen und elektronische Musik hören."