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

Exitvalue für Subroutine

Frage Entwicklung Batch & Shell

Mitglied: Knumskull

Knumskull (Level 1) - Jetzt verbinden

12.05.2009, aktualisiert 16:59 Uhr, 3963 Aufrufe, 6 Kommentare

Hallo,

gibt es eine Möglichkeit, den Aufruf eine Subroutine mittels Exitvalue zu überprüfen?

01.
@echo off 
02.
echo Mache was 
03.
 
04.
call :subroutine 
05.
if %errorlevel%==20 echo HALLO 
06.
goto :eof 
07.
 
08.
:subroutine 
09.
echo Mache nix 
10.
exit /b 20
Das funktioniert nicht, da er mir die ganze Shell beendet. Gibt es dafür eine Möglichkeit?
Ich möchte eine Subroutine aufrufen und hinterher die Möglichkeit haben, auf mehrere Varianten zu überprüfen.

Gruß,
Steffen
Mitglied: 60730
12.05.2009 um 17:11 Uhr
Servus,

das exit am ende der Sub ist das ende des scriptes.
Von daher

01.
@echo off 
02.
echo Mache was 
03.
 
04.
call :subroutine 
05.
echo HALLO 
06.
if %errorlevel%==20 echo HALLO Fehler20 
07.
 
08.
call :subroutine 
09.
echo HALLO2 
10.
if %errorlevel%==20 echo HALLO2 Fehler20 
11.
goto :eof 
12.
 
13.
 
14.
:subroutine 
15.
echo Mache nix 
16.
:eof
(edit)
vielleicht wird es "so" deutlicher...
01.
@echo off 
02.
echo Mache was 
03.
 
04.
call :subroutine Hallo 
05.
 
06.
call :subroutine Moin 
07.
 
08.
call :subroutine Abend 
09.
 
10.
 
11.
goto :eof 
12.
 
13.
:subroutine 
14.
echo %1 
15.
:eof
(/edit)

Gruß
Bitte warten ..
Mitglied: LotPings
12.05.2009 um 17:42 Uhr
Zitat von 60730:
Servus,

das exit am ende der Sub ist das ende des scriptes.

Hallo Timo,
da liegst du falsch. Problem ist das er den Batch nicht aus einer Shell heraus startet und
ein goto :eof ohne eine vorherige Pause macht.

Er hat also gar keine Gelegenheit das richtige Ergebnis zu sehen weil das Fenster sofort weg ist.

Dies funktioniert sehr wohl und es gibt auch eine Variante mit bedingter Ausführung:
01.
@echo off 
02.
echo Main Mache was 
03.
 
04.
call :subroutine 
05.
if %errorlevel%==20 echo HALLO 
06.
 
07.
call :subroutine || echo Return mit ERR:%ErrorLevel% 
08.
 
09.
Pause 
10.
goto :eof 
11.
 
12.
:subroutine 
13.
echo subroutine Mache nix 
14.
exit /b 20
Gruß
LotPings
Bitte warten ..
Mitglied: Biber
12.05.2009 um 17:58 Uhr
Moin Knumskull,

ich hab keine Ahnung, wofür das gut sein soll....
Geht es um eine Wette - dann hätte ich gern anteilig 1/24 davon, falls es um eine Kiste Becks gehen sollte.

01.
@echo off 
02.
echo Mache was 
03.
 
04.
call :subroutine 
05.
@echo Errorlevel [%errorlevel%] 
06.
if %errorlevel%==20 echo HALLO 
07.
goto :eof 
08.
 
09.
:subroutine 
10.
echo Mache nix 
11.
Cmd /c exit /b 20 
12.
goto :eof
Demo:
01.
>e:\schnipsel\errorlevel20test.cmd 
02.
Mache was 
03.
Mache nix 
04.
Errorlevel [20] 
05.
HALLO
Grüße
Biber
Bitte warten ..
Mitglied: Knumskull
12.05.2009 um 18:21 Uhr
Vielen Dank für die zahlreichen Antworten. Nein es geht um keine Wette ... aber wenn du in der Nähe wohnst, können wir gern mal ein Bierchen trinken

Mein Problem ist einfach, das ich eine Routine aufrufe, die unterschiedliche Möglichkeiten der Rückgabe haben muss, weil ich anhand der Rückgabe wieder unterscheiden muss, wie ich weiter mache.

Eigentlich sollte man das ganze schon eher in ner richtigen Programmiersprache machen, aber wenn es trotzdem noch geht. Umso besser ;)

also ich werde das morgen mal testen.

P.S.: Es geht um eine SSH-Verbindungsinitialisierung und automatischem Schlüsselaustausch zw. Windows und Linux.

Benötige ich für einen Job-Aufruf ... alles nicht so einfach ^^
Bitte warten ..
Mitglied: Biber
12.05.2009 um 19:05 Uhr
Moin Knumskull,

dann nochmal etwas ernsthafter.

Wenn Du tatsächlich
  • eine Unterroutine aufrufst, die verschiedene Fehlercodes oder Errorlevel setzt,
  • die Du dann im Haupt-Teil meinetwegen nach "wenn Fehlercode größer 10, dann brich ab" auswertest

--> dann mach das mit einer selbst angelegten "Private"-Variablen "Fehlercode" oder "myErrorLevel".

Die "Umgebungsvariable" %Errorlevel% wird sowohl von internen wie von externen Befehlen gesetzt, d.h Du kannst ja nicht mal sicher sein, wie lange dieser per EXIT /B gesetzte Wert so bleibt.
Oder hast Du schon mal probiert, ob z.B. eine dazwischengeschobene Kommentarzeile mit REM nicht vielleicht wieder das %ErrorLevel% auf 0 zurücksetzt?

Grüße
Biber
Bitte warten ..
Mitglied: Knumskull
12.05.2009 um 19:10 Uhr
Oder hast Du schon mal probiert, ob z.B. eine dazwischengeschobene
Kommentarzeile mit REM nicht vielleicht wieder das %ErrorLevel% auf 0
zurücksetzt?


Ich nicht, aber du? Wenn du sowas schreibst? Ist es so?

hm ... mit einer selbst definierten Variable habe ich dann wieder das Problem, das ich die nicht ohne delayedexpansion während der laufzeit ausweren kann. Eigentlich wollte ich diesmal ohne dem auskommen ... aber du hast recht, sinnvoller ist es ja eigentlich schon.

Oder is muss mehrere Vars verwenden ... na mal schauen ... muss mir das morgen nochmal anschauen. Hab den Kram zum Glück grad nicht vor mir liegen ...
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...