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 an bestimmter Sprungmarke starten

Frage Entwicklung Batch & Shell

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

14.02.2012, aktualisiert 21:00 Uhr, 4576 Aufrufe, 9 Kommentare

Guten Abend, bin durch bastla und diesen Beitrag auf das Problem aufmerksam geworden:
http://www.administrator.de/index.php?content=96670

Folgendes Problem: Ich habe eine sehr komplexe Batch mit vielen Sprungmarken. Nun möchte aus einem CD-Menü heraus verschiedene Sprungmarken ansteuern. Das hat den Sinn, dass ich nicht jedes Mal eine neue Batch anlegen muss, sondern eine Batch für die unterschiedlichsten Anwendungen nutze.
Jetzt ist mir allerdings nicht der Inhalt (zweite Zeile von AndererBatch) klar. Nach Bastlas Überlegung müsste ich mit meinem Menü jeweils eine Datei anlegen, wenn die vorhanden ist abfragen lassen und dann wie in Zeile 2 (die ich nicht verstehe) von AndererBatch abfragen lassen.
Gibt es dazu noch eine mögliche Alternative? (Vielleicht batch mit Parameter/Sprungmarke starten) Ansonsten wäre ich schon über eine Erklärung der 2. Zeile von AndererBatch glücklich...

01.
:: 1. Batch 
02.
@echo off & setlocal 
03.
if exist C:\jetztnicht.txt C:\AndererBatch.bat jetztnicht 
04.
::weiterer Ablauf wie immer 
05.
:: 
06.
:: 
07.
 
08.
 
09.
 
10.
::AndererBatch.bat 
11.
@echo off & setlocal 
12.
if "%~1"=="jetztnicht" goto :start 
13.
::weiterer Ablauf wie immer 
14.
:: 
15.
:: 
16.
:start 
17.
echo Fangen wir doch gleich hier an ... 
18.
::Damit das aber nicht jedes Mal passiert: 
19.
if exist C:\jetztnicht.txt del C:\jetztnicht.txt
Gruß OKIDOKI
Mitglied: bastla
14.02.2012 um 21:17 Uhr
Hallo OKIDOKI!
Ansonsten wäre ich schon über eine Erklärung der 2. Zeile von AndererBatch glücklich...
Na dann will ich mal versuchen, Dich glücklich zu machen ...

In der angesprochenen Zeile wird einfach nur geprüft, ob die Datei "C:\jetztnicht.txt" existiert - falls ja, wird der Batch "C:\AndererBatch.bat" gestartet und als Aufrufparameter "jetztnicht" übergeben. Dieser Parameter kommt im zweiten Batch als %1 an und kann dort für die Verzweigung zum richtigen Programmteil genutzt werden.
Wenn es nur darum geht, dass ein Batch gleich ab einer bestimmten Sprungmarke ausgeführt wird, könntest Du einfach an den Anfang etwa folgende Konstruktion setzen:
01.
@echo off & setlocal 
02.
if #%~1# neq ## findstr /i /b /c:":%~1" "%~f0">nul && goto :%~1 
03.
::kein Sprung erfolgt, daher Start von Anfang an
Hier wird geprüft, ob ein Parameter übergeben wurde, und wenn ja, ob eine gleichnamige (bis auf Groß-/Kleinschreibung) Sprungmarke (darf nicht eingerückt sein, ansonsten "/b" weglassen) existiert - wenn wieder ja: Sprung zu dieser Marke. Ist kein Sprung erfolgt, geht es einfach in der nächsten Zeile weiter. Besonderheiten: Da in einer Sprungmarke auch Leerzeichen vorkommen dürfen (würde ich aber nie machen), muss einerseits mit "/c:" festgelegt werden, dass "findstr" den gesamten Suchbegriff verwendet und andererseits mit "%~1" dafür gesorgt werden, dass umgebende Anführungszeichen (die ja beim Aufruf verwendet werden müssten) entfernt werden. Ach ja - der gerade aufgerufene Batch "kennt sich selbst" als %0 (wobei bei einem Aufruf unter Anführungszeichen der Typ ".cmd" oder ".bat" zwingend angegeben werden muss) ...

Der Aufruf, um bei ":Marke2" zu starten, würde dann so aussehen:
DeinBatch Marke2
oder
"D:\Dein Batch.cmd" Marke2
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
14.02.2012 um 21:35 Uhr
Hallo Zusammen.

Alternativ könnte man per CALL die Label als Subroutinen aufrufen:

call_test.bat
01.
@echo off &setlocal 
02.
call test label1 
03.
call test label3 
04.
call test label2 
05.
call test label4 
06.
pause
test.bat
01.
@echo off 
02.
if "%~1" neq "" call :%~1 2>nul|| echo Label :%~1 existiert nicht 
03.
goto :eof 
04.
 
05.
:label1 
06.
echo hier ist label1 
07.
goto :eof 
08.
 
09.
:label2 
10.
echo hier ist label2 
11.
goto :eof 
12.
 
13.
:label3 
14.
echo hier ist label3 
15.
goto :eof
Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
14.02.2012 um 22:31 Uhr
Vielen Dank schon einmal, ich muss das in Ruhe noch einmal ausprobieren...

Zu rubberman: mit ist call_test.bat nich so ganz klar, wie entsteht denn der Batch? Werden hier nicht nur alle Abfragen abgearbeitet?
Zu bastla: das sieht ja sehr kompliziert aus ...
Folgenden Wunsch hätte ich noch, damit es vielleicht einfacher wird:
Der aufgerufe Menüpunkt schreibt in eine txt seine Sprungmarke: z.B. Sprung1 (Möglicherweise gibt es 10 Sprungmarken oder mehr). Jetzt soll überprüft werden, ob eine Sprungmarke vorhanden ist. Nun bräuchte doch einfach nur die Sprungmarke ausgelesen zu werden (Variable, wobei die txt dann wieder gelöscht wird wie schon von bastla vorgeschlagen) und die Batch an der entsprechenden (ausgelesenen Sprungmarke) gestartet werden.
Ist das praktikabel und kannst du dies noch anpassen? Es geht also nicht nur darum die Batch an einer bestimmten Stelle zu starten, sondern es soll eine "txt-Sprungmarke" ausgelesen werden, wenn vorhanden, und die Batch dann an dieser Stelle gestartet werden.

So ähnlich?:
01.
@echo off  
02.
if exist sprung.txt (GOTO weiter) else (GOTO EOF) 
03.
:weiter 
04.
set /p sprung=<sprung.txt 
05.
DeinBatch %sprung% 
06.
del sprung.txt 
07.
goto :eof
Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
14.02.2012 um 22:41 Uhr
Hallo OKIDOKI!

Wozu soll die Textdatei gut sein? Der "Menüpunkt" kann doch den Batch direkt mit Übergabe der Sprungmarke als Parameter (wie oben gezeigt) aufrufen ...
Zu bastla: das sieht ja sehr kompliziert aus ...
... weswegen es auch eine Beschreibung dazu gibt ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
14.02.2012 um 22:49 Uhr
moinsen,

*hüstel...
Ist das praktikabel und kannst du dies noch anpassen?

  • Wenn du dir die Mühe gibst und ein paar ältere Freds der Antworter durchliesst, dann bekommst du eine Ahnung, was die notfalls alles anpassen können.

Aber - darum geht es hier garnicht - "wenn" "wir" hier jemandem was schreiben, dann hoffen wir, dass der sich diese Schnippsel zum spielen vornimmt und dann bekommt derjenige auch relativ schnell einen Einblick wie und was geht oder nicht.

Zu Rubbermans Zeilen...

  • nimm das/beide €cho off raus.
Bitte warten ..
Mitglied: rubberman
15.02.2012 um 00:05 Uhr
Hallo OKIDIKI.

Zitat von OKIDOKI:
Zu rubberman: mit ist call_test.bat nich so ganz klar, wie entsteht denn der Batch? Werden hier nicht nur alle Abfragen
abgearbeitet?

Damit du verstehst was passiert, habe ich extra die Reihenfolge verdreht (1 3 2) und zusätzlich aufgezeigt, wie du mit fehlerhaften/nicht existierenden Labeln umgehen kannst (4).

Irgendwie scheint es mir, als kannst du mit der ganzen Geschichte nur wenig anfangen. %1 expandiert zum ersten übergebenen Argument. Die Tilde in %~1 entfernt zusätzlich umschließende Anführungszeichen (sofern vorhanden).

Was ich wiederum nicht begreife ist (wie auch bastla bereits angemerkt hat), warum du mit irgendwelchen zusätzlichen Textdateien herum experimentieren willst. In deinem Eingangspost sagst du, dass das ganze menügesteuert ablaufen soll. Ergo rufe doch den Batch (je nach gewähltem Menüpunkt) mit einem entsprechenden Argument auf. Also das, was in meinem Beispiel call_test.bat tut.

Zum besseren Verständnis eine veränderte call_test.bat
01.
@echo off 
02.
echo 1  label1 
03.
echo 2  label2 
04.
echo 3  label3 
05.
echo( 
06.
set /p "n=Gib eine der Nummern ein: " 
07.
echo( 
08.
call test label%n% 
09.
pause
Und wenn du nicht siehst, welcher Weg genommen wird, solltest du in der Tat T-Mo's Rat befolgen und
@echo off
entfernen oder, der besseren Übersicht wegen, durch
@prompt $g
ersetzen.

Grüße
rubberman
Bitte warten ..
Mitglied: pieh-ejdsch
15.02.2012 um 18:36 Uhr
moin,

Sprungmarke (darf nicht eingerückt sein, ansonsten "/b" weglassen) existiert - wenn wieder ja: Sprung zu dieser Marke.

dann sollte es diese Zeile auch schon erledigen
01.
findstr /i /r /c:"^ *:%~1 *$" "%~f0" && echo weiter von hier && goto %~1 
02.
rem doch von vorn
Gruß Phil
Bitte warten ..
Mitglied: OKIDOKI
15.02.2012 um 20:52 Uhr
Leute, ihr habt so recht...

Mittlerweile, finde ich zumindest, nehme ich mir die Sachen immer so vor, dass damit rumspiele bis ich nicht weiterkomme. Dabei stoße ich, zugegebenermaßen, oft auf weitere Hindernisse. Allerdings verbringe ich damit oft Stunden zu.
Also, falls meine Arbeit oberflächlich wirkt bitte ich hiermit um Rücksicht - oft sehe ich abends den Wald vor lauter Bäumen nicht

Das Rumgeamche mit der Textdatei war nur, weil wir anfänglich davon ausgegangen waren!

Die Vorgehensweisen bei euch sind mir jetzt - eigentlich - soweit klar. Mit Menugesteuert meinte ich glaube was anderes als was ich geschrieben hatte: Es wird quasi etwas gestartet oder ausgeführt, daher die Textdatei, die ausgelesen wird, damit er weiß, an welcher Stelle er starten soll.
Vielleicht könnt ihr es euch nicht mehr vorstellen, wei schwer es ist, sich in diese Sprache hineinzudenken . Ich bin richtig überwältigt, wie TimoBeil zu recht anmerkt, was ihr alles möglich macht - echt! Ich habe auch versucht das immer auszudrücken!!!

Ich fasse zusammen:

Wenn meine Menu, was ja nur eine batch auslösen kann funktionieren soll, reicht es doch, nach eurer Vorarbeit und pieh-ejdsch Zusammenfassung, pieh-ejdsch´s Zeile in den "Hauptbatch" zu schreiben. Aus meinem Menu müsste dann nur jeweils gestartet werden, wie bastla schrieb: DeinBatch Marke2 oder DeinBatch Marke3 oder DeinBatch Marke2 oder ...
Dann hätte ich meine ~ 10 Menubatches (je DeinBatch Marke2, oder 3 oder ...) und meine Hauptbatch mit der übrig gebleibenen Zeile von Phil, der die Eingabe der zuvor gestarteten Batch übernernimmt!
Das werde ich jetzt mal in Ruhe testen und mich dann wieder melden

Seid herzlich gegrüßt und bitte nicht genervt von meiner Blauäugigkeit - DANKESCHÖN -

Gruß OKIDOKI
Bitte warten ..
Mitglied: OKIDOKI
19.02.2012 um 20:24 Uhr
Guten Abend,

ich war die ganze Woche unterwegs, daher konnte ich erst heute in Ruhe probieren!
Es klappt super - ich bin total begeistert und dankbar!

Noch einmal vielen Dank für eure Hilfe und eure Geduld!

Gruß OKIDOKI
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch, Aufgabe mit höchsten Previlegien soll Outlook "normal" starten (6)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch erst starten wenn bestimmte Datei vorhanden ist (7)

Frage von pdiddo zum Thema Batch & Shell ...

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

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...