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

Batchaufruf per CALL aus einer 1.Batch und dortiger Verarbeitung ausschließlich eines Labels

Frage Entwicklung Batch & Shell

Mitglied: Batchfan

Batchfan (Level 1) - Jetzt verbinden

23.11.2011, aktualisiert 21:33 Uhr, 4045 Aufrufe, 6 Kommentare

Werte Batch-Freunde
Eine 2.Batch aus einer Ur-Batch aufzurufen mithilfe von Steuervariablen und den Schritt zurück bekomme ich hin.
Aber kann ich das auch anderes lösen ?

Diese Batch1 ruft in einer batch2 ein bestimmtes Label auf und verläßt nach Abarbeitung des Labels die Batch2
Das ganze 2x

01.
REM BAT1 
02.
@echo off 
03.
cls 
04.
echo ____ 1.Aufruf bat2.bat step1 ___ 
05.
call bat2.bat step1 ende 
06.
echo zurück in bat1.bat 
07.
rem 
08.
echo ____ 2.Aufruf bat2.bat step2 ____ 
09.
call bat2.bat step2 ende 
10.
echo zurück in bat1.bat 
11.
:ende
01.
REM BAT2 
02.
@echo on 
03.
if "%2" equ "" ( 
04.
                        echo Spung zum Label ok ... aber : 
05.
                        echo keinen Ausstiegsparameter angegeben. Abbruch. 
06.
                        pause 
07.
                        goto ende 
08.
09.
for %%v in ( step1 step2 ) do if "%1" equ "%%v" goto %%v 
10.
:step1 
11.
echo Befehle ...... 
12.
if "%2" equ "ende" goto ende 
13.
:step2 
14.
echo Befehle ...... 
15.
if "%2" equ "ende" goto ende 
16.
:ende
Gibt es andere Möglichkeiten ?
Lieben Dank für Euere Antworten ... !!!!!

[Edit Biber] Als Code formatiert. [/Edit]
Mitglied: Biber
23.11.2011 um 21:47 Uhr
Moin Batchfan,

zur Beantwortung deiner Frage müssten wir vielleicht dein Ziel, den grossen Plan kennen.

Meine erste Gegen-Frage wäre:
Warum sind denn zwei (oder zweiundzwanzig?) Einzel-One-Trick-Batches sinnvoller und wartbarer als EINE Batchdatei?

Es geht auch mit "Call :BlockInDerGleichenBatchdatei auchMitParameter1 undPara2 usw"

Bei Sprungmarken musst du immer ein explizites "goto RausAusDemJob" oder "goto VersuchsNochMal" angeben nach jedem Block/Label.
Ist nicht sehr flexibel und schon gar nicht wartbar.
Du siehst ja keinem Mädel Label an, wer es wann und von wo anspringt.

Besser ist schon eine Mimik mit geCALLten internen Unterroutinen und deren Rückkehr zu der aufrufenden Zeile.

Grüße
Biber
Bitte warten ..
Mitglied: Batchfan
24.11.2011 um 05:01 Uhr
Hallo Biber
Ich habe nun schon mehrfach größere Anwendungen geschrieben, auch damls in DCL (VMS) und so ... Allerdings habe ich mich dabei in der Feinheit der Anwendungen nicht wirklich weiterentwickelt weil das gröbere ja auch ging und ich es nicht besser wußte. Nebenbei wurden die Betriebssysteme (VMS) und meine Schukung darauf nicht wirklich weitergeschult. Wie dem auch sei ....
Ich kann mich gut in größeren Batchstrukturen bewegen, wenn ich mit lokalen Variablen oder z.N. Kontrolldateien arbeite ... aber wie gesagt, z.B. reguläre Ausdrücke, komplexe For-Schleifen oder kopfgesteuerte Schleifen ect. habe ich mir immer selber gestrickt. Wenn ich aber das sehe, was ihr hier so zusammenstellt, wird mir ganz schummerig. Aber ich will das lernen .

In diesem Fall würde mich interesieren, ob ein Aufruf :
CALL Bat2.bat :Marke
funktioniert und wie am Ende der angesteuerten Marke ein Ausstieg aus Batch2 anders möglich ist als ich es oben gezeigt habe.

Gruß volker
Bitte warten ..
Mitglied: Skyemugen
24.11.2011 um 09:02 Uhr
Aloha,

auch wenn mir das ebenso halb-sinnig erscheint, du könntest doch in der 1. Batch call batch2.bat :Marke aufrufen und in der zweiten Batch
01.
@echo off 
02.
call %1 
03.
goto :eof 
04.
echo Nicht in der Marke 
05.
pause 
06.
goto :eof 
07.
 
08.
:Marke 
09.
echo Mittendrin 
10.
goto :eof
oder wenn du (ich blick deine Struktur heute nicht) unbedingt %2 auf ende abfragen willst, dann eben per call batch2.bat :Marke ende die zwete aufrufen.

greetz André
Bitte warten ..
Mitglied: Batchfan
24.11.2011 um 17:17 Uhr
@echo off
rem bat3.bat
echo ____ 1.Aufruf bat3.bat step1 ___
call bat4.bat :step1
echo zurück in bat3.bat
echo ____ 2.Aufruf bat3.bat step2 ____
call bat4.bat :step2
echo zurück in bat3.bat
goto ende
:ende

@echo off
rem Bat4.bat
call %1
:step1
echo Hier ist bat4.bat step1
goto :eof
:step2
echo Hier ist bat4.bat step2
goto :eof

Ausgabe:
____ 1.Aufruf bat3.bat step1 ___
Hier ist bat4.bat step1 << wäre ok
Hier ist bat4.bat step1 << aber hier die Ausgabe ein 2.tes mal ?
zurück in bat3.bat
____ 2.Aufruf bat3.bat step2 ____
Hier ist bat4.bat step2 << wäre ok
Hier ist bat4.bat step1 << Ausgabe einer vorherigen Marke ?
zurück in bat3.bat

Habe XP SP2 auf dem Rechner ... geht das überhaupt damit, das man eine nichtvorhandene Marke :eof anspringt ?
Normalerweise sollte ein Fehler gemeldet werden. Da das nicht ist, sollte es wohl ok sein.

Was ich sehe ist, das ein Sprung mal soeben in den nächsten Batch nicht möglich ist.
Gruß volker
Bitte warten ..
Mitglied: Biber
24.11.2011 um 20:38 Uhr
Moin Batchfan,

bitte benutze Codeformatierung.

Füge in Bat4.bat zwischen der 3.ten Zeile ("call %1") und Zeile 4 (":step1") eine neue Zeile ein mit "goto :eof"

Die Ausgabe sollte sich ändern in

1.Aufruf bat3.bat step1
Hier ist bat4.bat step1
zurück in bat3.bat
2.Aufruf bat3.bat step2
Hier ist bat4.bat step2
zurück in bat3.bat


Grüße
Biber
Bitte warten ..
Mitglied: Batchfan
25.11.2011 um 18:57 Uhr
Lieben Dank, Biber

So, das muss man also wissen

@echo off << 1. Komme aus Batch3 mit der Sprunganweisung zu :step1 im Gepäck.
call %1 <<-- 2. hier sagt jetzt CALL gehe zu :step1(%1)
goto:eof <<-- 5. Hier die Essenz: Diese Anweisung verhindert nun eine 2. Abarbeitung des Step1 !!! und geht wirklich zum :EOF des File
:step1 <<-- 3.ab hier abarbeiten bis ein GOTO :EOF kommt.
echo irgendwas..
goto :eof <<-- 4.Dieses GOTO :EOF sagt dem Commandointerpreter beende den Call-Aufruf und gehe zur 1.Folgezeile nach dem CALL aus Zeile2
:step2
echo irgendwas ...
goto :eof

Die Abarbeitung eines CALL :Marke beginnt mit der :Marke und Endet bei GOTO EOF.
Um eine weitere Abarbeitung der Folgebefehle nach CALL auszuschließen muß hier
z.B. mit einem zweiten GOTO :EOF der Sprung zum Ende der Unterbatch angewiesen
werden.

Will man das etwas irrige mit dem Goto :EOF einfacher haben,
dann kann man auch so verfahren.

@echo off
rem Batch bat3.bat
cls
echo Aufruf Bat4, Step1
call bat4.bat step1
echo zurück in bat3
echo.
echo Aufruf Bat4, Step2
call bat4.bat step2
echo zurück in bat3
goto ende
:ende

@echo off
rem Bat4.bat
goto %1 <<-- 1.Sprung zur Marke step1
:step1 <<-- 2. Abarbeitung
echo irgendwas ...
goto :eof <<-- 3. diese Anweisung beendet wirklich Bat4 im 1. Aufruf
:step2 <<-- 4. zurück und 2. Aufruf
echo irgendwas ...
goto :eof <<-- 5. diese Anweisung beendet wirklich Bat4 im 2. Aufruf

Ausgabe:
Aufruf Bat4, Step1
irgendwas ...
zurück in bat 3

Aufruf Bat4, Step2
irgendwas ....
zurück in bat3

Zum guten Schluss: Ist %1 nicht oder fehlerhaft gesetzt gibts einen unkontrollierten Abbruch.

Danke an alle, ich schließe diesen Eintrag damit
Gruß volker
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

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

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 ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...