93578
Goto Top

1 Programm starten. Auf Ende warten. Danach 2 Programm starten. Auf Ende warten. Was mache ich falsch?

Hallo an alle!

Warum kommt immer nach dem Beenden des Programms 1 immer die Meldung "Batchdatei abbrechen? (j/n)".?

Das 1 Programm startet auch in einem CMD-Fenster und ich schließe dieses Fenster mit einem "Enter" - alles läuft wie es sein soll - d.h. es wird nach dem Start von Programm 2 gefragt.

Klicke ich aber auf Standard-Icon "X" ("Schließen") oben rechts, bekomme ich immer die oben genannte Meldung. Wie kann ich trotz vorzeitiger Beendigung des 1 Programms durch Klick auf "X", das Programm "2" ohne vorherigen Ctrl+C-Meldung starten?

@ECHO OFF
echo Das Programm wurde gestartet.
ECHO Programm "1" starten? (j / n)  
: Marker1
SET /p wahl=
if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' (goto Ja ) ) else goto Nein   
if defined wahl ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto Marker1  
:Nein
echo Das Programm "1" wurde nicht gestartet.  
goto Ende
:Ja
echo Das Programm "1" wird gestartet.  
start /wait Files\1
echo Das Programm "1" wurde beendet.  
goto Ende
:Ende
echo Das Programm "2" starten? (j / n)  
: Marker2
set /p wahl1=
if /i not '%wahl1%' == 'n' (if /i '%wahl1%' == 'j' (goto Ja ) ) else goto Nein   
if defined wahl1 ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto Marker2  
:Nein
echo Das Programm "2" wurde nicht gestartet..  
goto Ende
:Ja
echo Das Programm "2" wird gestartet.  
start /wait Files\2
goto Ende
:Ende
pause

Content-ID: 187426

Url: https://administrator.de/contentid/187426

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

bastla
bastla 03.07.2012 um 17:43:19 Uhr
Goto Top
Hallo takitano!

Soferne es sich bei "Programm 1" um einen Batch handelt, könntest Du es mit
call Files\1
versuchen, und wenn es tatsächlich eine ".exe"-Datei sein sollte, einfach mit
Files\1
Grüße
bastla
NetWolf
NetWolf 03.07.2012 um 19:52:23 Uhr
Goto Top
Moin Moin,

du hast 2 x NEIN und 2 x Ende als Sprungmarke in deinem Script, ist das so gewollt?

Grüße aus Rostock
Wolfgang
(Netwolf)
93578
93578 03.07.2012 aktualisiert um 21:00:26 Uhr
Goto Top
Das ist eher eine batch-Datei, die in eine exe-Datei konvertiert wurde. Nach Programmende bleibt der Fenster geöffnet bis man auf "Enter" oder auf "X" klickt. Ich kann es nicht ändern, da das Programm nicht von mir ist.

1) call kennt "/wait" nicht. Deswegen passt es nicht ganz - Script wartet bis das erste Programm fertig ist und nur wenn das Programmfenster geschlossen wird läuft er weiter.
2) Wenn ich "/wait" nicht einsetze, kommt alles durcheinander. Oder verstehe ich was falsch?
93578
93578 03.07.2012 um 21:08:24 Uhr
Goto Top
Zitat von @NetWolf:
Moin Moin,

du hast 2 x NEIN und 2 x Ende als Sprungmarke in deinem Script, ist das so gewollt?

Grüße aus Rostock
Wolfgang
(Netwolf)

Ja. Da gibt's noch weitere Zeilen... face-smile Ich habe Quelltext ein bisschen aktualisiert, zwar nicht ganz alls, dennoch funktioniert es (abgesehen von fehlenden Programmen)
Pjordorf
Pjordorf 03.07.2012 um 21:37:06 Uhr
Goto Top
Hallo,

Zitat von @93578:
Ja. Da gibt's noch weitere Zeilen... face-smile
Dir ist aber schon klar das eine Sprungmarke Eindeutig sein muß (Soll?) damit auch die von dir gewünschte Sprungmarke angesprochen wird? Du hast in deinem uns geposteten Code in Zeilen 8 und 22 jeweils als Sprungmarke ":Nein" stehen. In Zeilen 11 und 25 jeweils ein ":Ja" stehen. In Zeilen 16 und 29 jeweils ein ":Ende". Auch die Zeilen 4 und 18 mit ": Marker1" bzw. ": Marker2" sind wegen des Leerzeichens nach dem Doppelpunkt nicht mehr eindeutig. Eine Sprungmarke hört am ersten Leerzeichen auf. Hier also nur ":". Ob dies allerdings auch so im Batch gewertet wird kann ich jetzt ohne testen nicht sagen. Weiterhin wird eine Sprungmarke immer vom Anfang der Datei gesucht und beim ersten zutreffen angewendet. Weshalb deine jeweils 2.ten ":Ja", ":Nein", ":Ende" nie erreicht werden.
Eine Sprungmarke darf beliebig lang sein, aber DOS ignoriert 
alles, was ueber 8 Stellen hinausgeht !! Falls mehrere Marken 
vorkommen, die (in den ersten 8 Stellen) gleich sind, wird immer 
nur die erste gefunden.
Inwiefern noch für XP/Vista/Win7 zutreffend kann ich ohne testen nich sagen.
 
Wenn Sonderzeichen verwendet werden, bitte nur solche, die auch 
in Dateinamen gueltig sind (ausser "%"). Andere Sonderzeichen sind 
Trennzeichen. Vorsicht: Ein "?" ist z.B. gueltig, aber ein "*" 
ist absolut unbrauchbar. Am besten: keine dubiosen Sonderzeichen 
verwenden! 
Nach dem Leerzeichen oder Trennzeichen wird der Rest der Zeile 
ignoriert. Dies sollte zur Kommentierung genutzt werden! 
dennoch funktioniert es
Weshalb du ja auch ein "Batchdatei abbrechen? (j/n)" unerklärlicherweise immer bekommstface-smile

Gruß,
Peter
bastla
bastla 03.07.2012 um 21:48:19 Uhr
Goto Top
Hallo takitano!
Wenn ich "/wait" nicht einsetze, kommt alles durcheinander. Oder verstehe ich was falsch?
Lass mich das mit einer Frage beantworten: Was hat denn Dein diesbezüglicher Test ergeben?

Grüße
bastla
pieh-ejdsch
pieh-ejdsch 03.07.2012 um 21:49:52 Uhr
Goto Top
moin takitano,

Versuch es So:
start "Programm 1" /wait cmd /k "Files\1 && (echo Programm Fertig &pause &exit /b 0) || (Programm Fehler &pause &exit /b 1)"  

die Auswahl würde ich vereinfachen erst Die Positive Abfrage auf ja und dann negativ auf nein.
Ist nicht so verworren geschrieben und schön kurz:
: Marker1
SET /p wahl=
if /i '%wahl%' == 'j' goto :Ja  
if /i not '%wahl%' == 'n' ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto Marker1  
:Nein
 rem Hier Nein
::.....
:Ja
 rem hier ja
:.....

Gruß Phil
bastla
bastla 03.07.2012 aktualisiert um 21:58:55 Uhr
Goto Top
... oder so:
@ECHO OFF & setlocal
echo Das Programm wurde gestartet.
:Marker1
SET /p wahl=Programm "1" starten? (j / n)  
if /i '%wahl%'=='n' (echo Das Programm "1" wurde nicht gestartet. & goto Marker2)  
if /i '%wahl%' neq 'j' (ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto Marker1)  
echo Das Programm "1" wird gestartet.  
Files\1
echo Das Programm "1" wurde beendet.  

:Marker2
set "wahl="  
set /p wahl=Das Programm "2" starten? (j / n)  
if /i '%wahl%'=='n' (echo Das Programm "2" wurde nicht gestartet. & goto Ende)  
if /i '%wahl%' neq'j' (ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto Marker2)  
echo Das Programm "1" wird gestartet.  
Files\2
:Ende
pause
Grüße
bastla
pieh-ejdsch
pieh-ejdsch 03.07.2012 um 22:07:27 Uhr
Goto Top
Zitat von @Pjordorf:
... ": Marker1" bzw. ": Marker2" sind wegen des Leerzeichens nach dem Doppelpunkt nicht mehr eindeutig. Eine Sprungmarke hört am ersten Leerzeichen auf. Hier also nur ":". Ob dies allerdings auch so im Batch gewertet wird kann ich jetzt ohne testen nicht sagen. Weiterhin wird eine Sprungmarke immer vom Anfang der Datei gesucht und beim ersten zutreffen angewendet. Weshalb deine jeweils 2.ten ":Ja", ":Nein", ":Ende" nie erreicht werden.

Sprungmarken werden immer erst in den Folgenden Zeilen gesucht und erst danach gehts von Vorn los.
Das mit dem Doppelpunkt und dem Leerzeichen vor der Marke ist zwar nicht ganz Batch-konform ... aber Vernachlässigbar.
setlocal
set "prompt=$g"  
echo 0
goto :Next
echo 0,1
:Next
echo 1
goto :Next
echo 1,1
:Next
echo 2
goto :Next
echo 2,2
: Next
echo 3
pause

Gruß Phil
Pjordorf
Pjordorf 03.07.2012 um 22:29:10 Uhr
Goto Top
Hallo Phil,

Zitat von @pieh-ejdsch:
Sprungmarken werden immer erst in den Folgenden Zeilen gesucht und erst danach gehts von Vorn los.
OK. War mir nicht sicher weshalb ich es auch nie ausgetestet / verwendet habe (Sprungmarken immer eindeutig gehalten)face-smile

Das mit dem Doppelpunkt und dem Leerzeichen vor der Marke ist zwar nicht ganz Batch-konform ... aber Vernachlässigbar.
OK. Das hätte ich sonst wirklich mal testen müssen.
Wer noch mit wie ich PC DOS 2.0 (1983) angefangen hat nachdem der C64 nicht mehr reichte, weiß noch was "eindeutig" bei Sprungmarken bedeutet und das ein Leerzeichen ein Trennzeichen darstelltface-smile

Danke und Gruß,
Peter
Penny.Cilin
Penny.Cilin 04.07.2012 um 09:01:31 Uhr
Goto Top
Zitat von @Pjordorf:
> Eine Sprungmarke darf beliebig lang sein, aber DOS ignoriert 
> alles, was ueber 8 Stellen hinausgeht !! Falls mehrere Marken 
> vorkommen, die (in den ersten 8 Stellen) gleich sind, wird immer 
> nur die erste gefunden.
> 

Inwiefern noch für XP/Vista/Win7 zutreffend kann ich ohne testen nich sagen.
 
> Wenn Sonderzeichen verwendet werden, bitte nur solche, die auch 
> in Dateinamen gueltig sind (ausser "%"). Andere Sonderzeichen sind 
> Trennzeichen. Vorsicht: Ein "?" ist z.B. gueltig, aber ein "*" 
> ist absolut unbrauchbar. Am besten: keine dubiosen Sonderzeichen 
> verwenden! 
> Nach dem Leerzeichen oder Trennzeichen wird der Rest der Zeile 
> ignoriert. Dies sollte zur Kommentierung genutzt werden! 
> 

Soweit ich weiß ist diese Restriktion in der Commandlineshell seit Windows XP nicht mehr soo relevant. ich verwende in Batches auch schonmal Sprungmarken mit mehr als 8 Zeichen.
93578
93578 04.07.2012 um 10:26:18 Uhr
Goto Top
Zitat von @bastla:
... oder so:
@ECHO OFF & setlocal
> echo Das Programm wurde gestartet.
> :Marker1
> SET /p wahl=Programm "1" starten? (j / n)  
> if /i '%wahl%'=='n' (echo Das Programm "1" wurde nicht gestartet. & goto Marker2)  
> if /i '%wahl%' neq 'j' (ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto  
> Marker1)
> echo Das Programm "1" wird gestartet.  
> Files\1
> echo Das Programm "1" wurde beendet.  
> 
> :Marker2
> set "wahl="  
> set /p wahl=Das Programm "2" starten? (j / n)  
> if /i '%wahl%'=='n' (echo Das Programm "2" wurde nicht gestartet. & goto Ende)  
> if /i '%wahl%' neq'j' (ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto  
> Marker2)
> echo Das Programm "1" wird gestartet.  
> Files\2
> :Ende
> pause
> 
Grüße
bastla

Geht nicht. Das Programm 1 wird immer in einem neuen CMD-Fenster gestartet. Wenn Benutzer es gleich danach durch den Klick auf "Fenster-Schließen (X oben rechts)" abbricht, kommt im ersten Fenster (wo Batch-Script läuft) immer noch dasselbe Meldung : Batchvorgang abbrechen (J/N)?
93578
93578 04.07.2012 aktualisiert um 11:17:53 Uhr
Goto Top
Zitat von @pieh-ejdsch:
moin takitano,

Versuch es So:
> start "Programm 1" /wait cmd /k "Files\1 && (echo Programm Fertig &pause &exit /b 0) || (Programm  
> Fehler &pause &exit /b 1)"  
> 

die Auswahl würde ich vereinfachen erst Die Positive Abfrage auf ja und dann negativ auf nein.
Ist nicht so verworren geschrieben und schön kurz:
> : Marker1
> SET /p wahl=
> if /i '%wahl%' == 'j' goto :Ja  
> if /i not '%wahl%' == 'n' ECHO Benutzen Sie bitte "j/J"-Ja oder "n/N"- Nein. & goto  
> Marker1
> :Nein
>  rem Hier Nein
> ::.....
> :Ja
>  rem hier ja
> :.....
> 

Gruß Phil

Danke, Phil! Es hat funktioniert! face-smile