Batch startet andere Batch errorlevel übergabe von 2ter an 1te batch ?
Hallo,
ich habe ein Problem, was sich einfach nicht von selbst in Luft auflösen will.
Ich habe eine Batch :
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 ???
ich habe ein Problem, was sich einfach nicht von selbst in Luft auflösen will.
Ich habe eine Batch :
@echo off
echo. >D:\cognos\Contributor\Macros\exec.txt
title Upload_Macro-Ausfuehrung
:importerstellung
cls
if "%1"=="" goto :eingabe_importerstellung
set batchname=\%1
goto :ausgabe_importerstellung
:eingabe_importerstellung
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Info: º
echo º Macros werden erstellt, ohne den Contributor starten zu mussen ausgefuhrt º
echo º Kompletten Makronamen eingeben (bei mehreren, wird eine Queue erstellt º
echo º Eingabe "start" um die Queue zu starten (statt Macronamen) º
echo º Eingabe "erstell" um eine Batch zu erstellen (statt Macronamen) º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo;
Echo Auszufuehrende Makros :
echo _______________________
echo;
for /F "tokens=1-10 delims=<> " %%a in ('findstr bat D:\cognos\Contributor\Macros\exec.txt') do echo %%a
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
set /p Batchname=Appl. - MakroNamen eingeben:
if "%batchname%"=="start" goto :endstep
if "%batchname%"=="erstell" goto :startup
if "%batchname%"=="list" goto :list_verzeich
goto :ausgabe_importerstellung
:ausgabe_importerstellung
echo Ausgabe zur Kontrolle:
echo Batchname=%batchname%.bat
if "%batchname%"=="start" goto :endstep
echo;
goto :kontrolle_importerstellung
:kontrolle_importerstellung
::dir D:\cognos\Contributor\Macros\%batchname%.bat
if exist D:\cognos\Contributor\Macros\%batchname%.bat goto :batchimportstandart
if not exist D:\cognos\Contributor\Macros\%batchname%.bat goto :stop_yet
GOTO :kontrolle_importerstellung
:batchimportstandart
REM Die Variablen können editiert werden
set zielpfad="D:\cognos\Contributor\Macros\%batchname%.bat"
set macroname=%batchname%
ping 127.0.0.1 -n 3 >nul
echo %Batchname%.bat >>D:\cognos\Contributor\Macros\exec.txt
goto :importerstellung
:endstep
echo endemarke >>D:\cognos\Contributor\Macros\exec.txt
goto :start_upload
:start_upload
call "D:\cognos\Utils\upload_macros\ausfuehrung_contributor_macors.bat"
goto :next_step
:next_step
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.
goto :eingabe_importerstellung
:stop_yet
echo das angebene macro existiert nicht!
echo entweder wurde die dazugehoerige Batch nie erstellt
echo oder es gibt gar kein Macro im Contributor.
echo 1) starte den Contributor und kontrolliere ob es diese Macro gibt!
echo 2) wenn ja erstelle die Batch gib "erstell" ein
goto :eingabe_importerstellung
:startup
call D:\cognos\Batcherstellung.exe
goto :eingabe_importerstellung
:list_verzeich
start "title batchlist" dir /b /tc D:\cognos\Contributor\Macros\*.bat
goto :eingabe_importerstellung
hier wird nun angegeben, welche batch(es) ich ausführen will.
sollte die batchdatei nicht existieren, so wird ein anderes programm gestartet mit der man diese erstellen kann.
soweit auch alles noch in ordnung
hat man nun alle batches angegeben gibt man "start" ein um diese nacheinander anzustarten dazu wird eine andere batch angestartet
for /F "tokens=1-10 delims=<> " %%a in ('findstr bat D:\cognos\Contributor\Macros\exec.txt') do call :ProcessFile "%%a"
:ProcessFile
set "Variable=%~1"
echo fuehre macro %Variable% aus
call D:\cognos\Contributor\Macros\%Variable%
if errorlevel 0 goto :eof
if errorlevel 1 goto :frage
if errorlevel 2 goto :frage
:frage
Echo;
Echo Ein Fehler wurde festgestellt beim ausfuehren des Macros %Variable%,
echo soll das naechste Macro trotzdem angestartet werden ?
echo oder soll das fehlerhafte Macro erneut gestartet werden ?
SET /P Choice=[J] fuer erneuter Lauf, [N] naechstes Upload_Macro:
IF NOT '%Choice%'=='' SET Choice=%Choice:~0,1%
IF /I '%Choice%'=='N' GOTO :eof
IF /I '%Choice%'=='J' GOTO :ProcessFile
IF /I '%Choice%'=='n%' GOTO error
Echo FALSCHE EINGABE von Terminal %COMPUTERNAME% !!!!!
:error
ping 127.0.0.1 -n 3 >nul
goto :start
if not "%1"=="" goto :start
:eof
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 ???
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 74667
Url: https://administrator.de/forum/batch-startet-andere-batch-errorlevel-uebergabe-von-2ter-an-1te-batch-74667.html
Ausgedruckt am: 25.12.2024 um 15:12 Uhr
6 Kommentare
Neuester Kommentar
Moin Landstreicher,
erstmal nur vorab eine kurze Antwort zu Deinem P.S.:
Indem Du die Formatierungstags 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
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 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
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
ein
zu machen.
Die Begründung dafür findest Du mit "if /?", oder auch gleich hier :
Eine weitere Möglichkeit wäre die Abfrage der Variablen %errorlevel%, etwa mit
Grüße
bastla
Soferne das Problem darin besteht, dass ":frage" trotz korrekter Übergabe eines Errorlevels <> 0 nie erreicht wird, müsste es eigentlich genügen, aus
if errorlevel 0 goto :eof
if errorlevel 1 goto :frage
if errorlevel 2 goto :frage
if not errorlevel 1 goto :eof
Die Begründung dafür findest Du mit "if /?", oder auch gleich hier :
ERRORLEVEL Nummer Bedingung ist erfüllt, wenn das zuletzt ausgeführte
Programm einen Code größer oder gleich der Nummer
zurückgibt.
Eine weitere Möglichkeit wäre die Abfrage der Variablen %errorlevel%, etwa mit
if %errorlevel%==0 goto :eof
Grüße
bastla
Moin Landstreicher,
der Weg zur Antwort führt über den EXIT-Befehl.
Die Batchdatei, die Success/InDieGrützeGehen der EXE-Datei mitbekommt, muss einen entsprechend "verabredeten" Errorlevel weiterreichen.
Beispiel
Aufgerufene Batch
Grüße
Biber
der Weg zur Antwort führt über den EXIT-Befehl.
>help exit
Beendet den Befehlsinterpreter CMD.EXE oder die aktuelle Batchdatei.
EXIT [/B] [exitCode]
/B Beendet das aktuelle Batchprogramm anstatt CMD.EXE.
Wenn diese Option außerhalb eines Batchprogramms aufgerufen
wird, wird CMD.EXE beendet.
ExitCode Gibt die Zahl an, die an ERRORLEVEL übergeben wird, wenn die
Option /B angegeben wurde. Wenn CMD.EXE beendet wird, wird diese
Zahl als "Process Exit Code" übergeben.
Die Batchdatei, die Success/InDieGrützeGehen der EXE-Datei mitbekommt, muss einen entsprechend "verabredeten" Errorlevel weiterreichen.
Beispiel
:: äußere Batchdatei
....
call MeinSklave.bat
If not errorlevel 1 goto :allesPrima
...
Aufgerufene Batch
::meinSklave.bat
....
MachMirDie.exe
Exit /b %errorlevel%
::rem Oder was immer "verabredet" ist
Grüße
Biber