Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch startet andere Batch errorlevel übergabe von 2ter an 1te batch ?

Frage Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

28.11.2007, aktualisiert 05.12.2007, 9857 Aufrufe, 6 Kommentare

Hallo,

ich habe ein Problem, was sich einfach nicht von selbst in Luft auflösen will.
Ich habe eine Batch :

01.
@echo off 
02.
echo. >D:\cognos\Contributor\Macros\exec.txt 
03.
title Upload_Macro-Ausfuehrung 
04.
:importerstellung 
05.
cls 
06.
if "%1"=="" goto :eingabe_importerstellung 
07.
set batchname=\%1 
08.
goto :ausgabe_importerstellung 
09.
 
10.
:eingabe_importerstellung 
11.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» 
12.
echo º Info:                                                                     º 
13.
echo º Macros werden erstellt, ohne den Contributor starten zu mussen ausgefuhrt º 
14.
echo º Kompletten Makronamen eingeben (bei mehreren, wird eine Queue erstellt    º 
15.
echo º Eingabe "start" um die Queue zu starten (statt Macronamen)                º 
16.
echo º Eingabe "erstell" um eine Batch zu erstellen (statt Macronamen)           º 
17.
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ 
18.
echo;  
19.
Echo  Auszufuehrende Makros :  
20.
echo  _______________________   
21.
echo;        
22.
for /F "tokens=1-10 delims=<> " %%a in ('findstr bat D:\cognos\Contributor\Macros\exec.txt') do echo  %%a 
23.
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ 
24.
set /p Batchname=Appl. - MakroNamen eingeben: 
25.
if "%batchname%"=="start" goto :endstep 
26.
if "%batchname%"=="erstell" goto :startup 
27.
if "%batchname%"=="list" goto :list_verzeich 
28.
goto :ausgabe_importerstellung 
29.
 
30.
:ausgabe_importerstellung 
31.
echo Ausgabe zur Kontrolle: 
32.
echo Batchname=%batchname%.bat 
33.
if "%batchname%"=="start" goto :endstep 
34.
echo; 
35.
goto :kontrolle_importerstellung 
36.
 
37.
:kontrolle_importerstellung 
38.
::dir D:\cognos\Contributor\Macros\%batchname%.bat 
39.
if exist D:\cognos\Contributor\Macros\%batchname%.bat goto :batchimportstandart 
40.
if not exist D:\cognos\Contributor\Macros\%batchname%.bat goto :stop_yet 
41.
GOTO :kontrolle_importerstellung 
42.
 
43.
:batchimportstandart 
44.
REM Die Variablen können editiert werden 
45.
set zielpfad="D:\cognos\Contributor\Macros\%batchname%.bat" 
46.
set macroname=%batchname% 
47.
ping 127.0.0.1 -n 3 >nul 
48.
echo %Batchname%.bat >>D:\cognos\Contributor\Macros\exec.txt 
49.
goto :importerstellung 
50.
 
51.
:endstep 
52.
echo endemarke >>D:\cognos\Contributor\Macros\exec.txt 
53.
goto :start_upload 
54.
 
55.
:start_upload 
56.
call "D:\cognos\Utils\upload_macros\ausfuehrung_contributor_macors.bat" 
57.
goto :next_step 
58.
 
59.
:next_step 
60.
for /F "tokens=1-10 delims=<> " %%i in ('findstr endemarke D:\cognos\Contributor\Macros\exec.txt') do echo alle Macros wurden ausgefuehrt, dennoch sollten diese auf fehlerfreien lauf geprueft werden. 
61.
goto :eingabe_importerstellung 
62.
 
63.
:stop_yet 
64.
echo das angebene macro existiert nicht! 
65.
echo entweder wurde die dazugehoerige Batch nie erstellt 
66.
echo oder es gibt gar kein Macro im Contributor. 
67.
echo 1) starte den Contributor und kontrolliere ob es diese Macro gibt! 
68.
echo 2) wenn ja erstelle die Batch gib "erstell" ein 
69.
goto :eingabe_importerstellung 
70.
 
71.
:startup 
72.
call D:\cognos\Batcherstellung.exe 
73.
goto :eingabe_importerstellung 
74.
 
75.
:list_verzeich 
76.
start "title batchlist" dir /b /tc D:\cognos\Contributor\Macros\*.bat  
77.
goto :eingabe_importerstellung 
78.
 
79.
hier wird nun angegeben, welche batch(es) ich ausführen will. 
80.
sollte die batchdatei nicht existieren, so wird ein anderes programm gestartet mit der man diese erstellen kann. 
81.
soweit auch alles noch in ordnung 
82.
 
83.
hat man nun alle batches angegeben gibt man "start" ein um diese nacheinander anzustarten dazu wird eine andere batch angestartet 
84.
 
85.
for /F "tokens=1-10 delims=<> " %%a in ('findstr bat D:\cognos\Contributor\Macros\exec.txt') do call :ProcessFile "%%a" 
86.
:ProcessFile 
87.
set "Variable=%~1" 
88.
echo fuehre macro %Variable% aus 
89.
call D:\cognos\Contributor\Macros\%Variable% 
90.
if errorlevel 0 goto :eof 
91.
if errorlevel 1 goto :frage 
92.
if errorlevel 2 goto :frage 
93.
 
94.
:frage  
95.
Echo; 
96.
Echo Ein Fehler wurde festgestellt beim ausfuehren des Macros %Variable%, 
97.
echo soll das naechste Macro trotzdem angestartet werden ? 
98.
echo oder soll das fehlerhafte Macro erneut gestartet werden ? 
99.
SET /P Choice=[J] fuer erneuter Lauf, [N] naechstes Upload_Macro:  
100.
IF NOT '%Choice%'=='' SET Choice=%Choice:~0,1% 
101.
IF /I '%Choice%'=='N' GOTO :eof 
102.
IF /I '%Choice%'=='J' GOTO :ProcessFile 
103.
 
104.
IF /I '%Choice%'=='n%' GOTO error 
105.
 
106.
Echo FALSCHE EINGABE von Terminal %COMPUTERNAME% !!!!! 
107.
:error 
108.
ping 127.0.0.1 -n 3 >nul 
109.
goto :start 
110.
 
111.
if not "%1"=="" goto :start 
112.
 
113.
:eof
auch das funktioniert soweit.

jetzt der knackpunkt bei :frage soll er abfangen ob die ausgeführte batch mit errorlevel 1 oder 2 beendet wurde.
denn sollte eine batch abbrechen darf die andere nicht so einfach weiterlaufen und deswegen auch die frage.

kann mir da jemand weiter helfen ?

als hinweis .. ich kann die batches die ausgeführt werden nicht verändern .... zumindest nicht ohne weiteres

gruß landstreicher

PS wie kann man das "batchgeschreibsel" von seinem beitragstext sichtbar trennen wie es in anderen beiträgen sichtbar ist ???
Mitglied: Biber
28.11.2007 um 18:53 Uhr
Moin Landstreicher,

erstmal nur vorab eine kurze Antwort zu Deinem P.S.:
PS wie kann man das "batchgeschreibsel" von seinem beitragstext sichtbar trennen wie es in anderen beiträgen sichtbar ist ???

Indem Du die Formatierungstags <code> verwendest.
Details siehe in den FAQ unter "Formatierungshilfen".

So, dennoch muss ich Dich erstmal mit Deinem Elend allein lassen - ich schau später noch mal auf den eigentlichen Batch, falls er bis dahin nicht erledigt ist.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
28.11.2007 um 19:19 Uhr
Hallo Landstreicher!

Soferne das Problem darin besteht, dass ":frage" trotz korrekter Übergabe eines Errorlevels <> 0 nie erreicht wird, müsste es eigentlich genügen, aus
01.
if errorlevel 0 goto :eof 
02.
if errorlevel 1 goto :frage 
03.
if errorlevel 2 goto :frage
ein
01.
if not errorlevel 1 goto :eof
zu machen.

Die Begründung dafür findest Du mit "if /?", oder auch gleich hier :
01.
  ERRORLEVEL Nummer Bedingung ist erfüllt, wenn das zuletzt ausgeführte 
02.
                    Programm einen Code größer oder gleich der Nummer 
03.
                    zurückgibt.
Eine weitere Möglichkeit wäre die Abfrage der Variablen %errorlevel%, etwa mit
01.
if %errorlevel%==0 goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
29.11.2007 um 12:33 Uhr
danke @ Biber

Moin Bastla,

ich glaub ich hab mich gestern doof ausgedrück (sorry war extrem kaputt).

Also es ist so das die Batchdatei die ausgeführt wird ein programm aufruft, welches aus welchen gründen auch immer abbrechen könnte oder seine aktion nicht zuende führen kann.
dann wird in der batch ein errorlevel zurückgegeben (meistens 2).
allerdings wird diese batch wiederum von einer anderen batch angestartet und diese batch soll nun das errorlevel der anderen auslesen.
ich habe allerdings das gefühl, das geht wirklich nur, wenn ich das mit einer variable mache, oder ?


kurzform


batch startet batch und diese startet ein programm
prgramm kann abbrechen, bacht bekommt errorlevel und soll es an erste batch übergeben damit ggf. nachgestartet werden kann.

grüße landstreicher und wie immer besten dank im vorraus
Bitte warten ..
Mitglied: Biber
29.11.2007 um 12:44 Uhr
Moin Landstreicher,

der Weg zur Antwort führt über den EXIT-Befehl.
01.
>help exit 
02.
Beendet den Befehlsinterpreter CMD.EXE oder die aktuelle Batchdatei. 
03.
 
04.
EXIT [/B] [exitCode] 
05.
 
06.
  /B          Beendet das aktuelle Batchprogramm anstatt CMD.EXE. 
07.
              Wenn diese Option außerhalb eines Batchprogramms aufgerufen 
08.
              wird, wird CMD.EXE beendet. 
09.
 
10.
  ExitCode    Gibt die Zahl an, die an ERRORLEVEL übergeben wird, wenn die 
11.
              Option /B angegeben wurde. Wenn CMD.EXE beendet wird, wird diese 
12.
              Zahl als "Process Exit Code" übergeben.
Die Batchdatei, die Success/InDieGrützeGehen der EXE-Datei mitbekommt, muss einen entsprechend "verabredeten" Errorlevel weiterreichen.

Beispiel
01.
:: äußere Batchdatei 
02.
.... 
03.
call MeinSklave.bat 
04.
If not errorlevel 1 goto :allesPrima 
05.
...
Aufgerufene Batch
01.
::meinSklave.bat 
02.
.... 
03.
MachMirDie.exe 
04.
Exit /b %errorlevel% 
05.
::rem Oder was immer "verabredet" ist
Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
05.12.2007 um 12:02 Uhr
Hey Biber,

schau an es wirkt ... war ja auch nicht anders zu erwarten

besten dank.
Bitte warten ..
Mitglied: Biber
05.12.2007 um 12:49 Uhr
Moin Landstreicher,

besten dank.
Dafür nich'.

Kannst Du das nächste Mal, wenn wir wieder so weit kommen sollten, in dieser Phase des Threads bitte den kleinen grünen Haken...???

Diesmal mach ich das. Is' ja bald Weihnachten...

Grüße und Dank für das Feedback
Biber
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Batch-Datei startet in der Aufgabenplanung nicht (12)

Frage von koehlo zum Thema Windows Server ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...