Top-Themen

Aktuelle Themen (A bis Z)

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, 4000 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 ..
Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 10 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 11 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server12 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server12 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Netzwerkgrundlagen
Laufwerkszuordnung mit zwei IPs
Frage von Alex29Netzwerkgrundlagen11 Kommentare

Hallo in die Runde, Ich als Hobbyadmin hätte mal wieder eine Frage an die Profis. Ich habe ein Netzwerk ...