Batch Sprungmarke fehlerhaft?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Kann nicht sein.

Wenn man eine Batch mit 500 Zeilen "gebaut" hat , läuft mit der organisation des Codes irgendwas schief.

Es wäre mühselig eine Batch von 500 Zeilen zu schreiben, deshalb habe ich auf die schnelle eine Batch geschrieben, welche eine solche TestBatch (mit 1000 Zeilen bis zum Label) automatisch generiert und aufruft...

@echo off
echo generiere 1000 Zeilen Code


echo set "testVar=1">"test.cmd"
echo if "%%testVar%%"=="1" goto :MyLabel>>"test.cmd"
for /l %%a in (1,1,1000) do (echo echo Zeile %%a vor Label)>>"test.cmd"
echo  pause>>"test.cmd"
  rem generiere  label
echo :MyLabel>>"test.cmd"
echo echo nach label>>"test.cmd"


  rem rufe  generiertte Batch auf
call "test.cmd"
pause

...wie gewünscht wir das Label direkt angesprungen. Weder die 1000 Zählzeilen noch Pause wird ausgeführt...

was dein doppeltes Ampersand && bewirken soll weiß ich nicht, da ich den vorangeghenden Befehl nicht kenne.

&& führt den folgenden Befehl nur aus, wenn Errorlevel = 0 ist. Für eine unbedingte Ausführung einer Befehlskette in einer Zeile verwendet man ein einfaches Ampersan& .

https://ss64.com/nt/syntax-redirection.html

  rem erzwinge errorlevel 1 und  entscheide
(call) && (echo kein Fehler) || (echo Fehler)
echo Errorlevel=%errorlevel%


  rem setze errorlevel 0 ( Leerzeichen nach Leercall löscht Errorlevel) und  entscheide
(call ) && (echo kein Fehler) || (echo Fehler)
echo Errorlevel=%errorlevel%
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
123tu 
Fragesteller
 09.09.2020, 06:18

Ich kann dir den dpwnload zum file schicken. Inzwischen habe ich herausgefunden dass man auch eine auskommentierte Zeile nehmen kann. Ich vermute der file ist an der Stelle fehlerhaft.

0
123tu 
Fragesteller
 09.09.2020, 07:29
@Erzesel

Okay, du musst dann in Zeile 438 oder so den auskommentierten Text entfernen, damit der Fehler provoziert werden kann.

Damit du da hinkommst musst du das Programm erst einrichten. Wenn du in der Konsole bist gibst du /messenger ein. Dann wird dir alles erklärt. Als Pfad kannst du deinen Desktop angeben. Wenn das Programm eingerichtet ist musst du nur /messenger ein damit du an die fehlerhafte Stelle gelangst.

Download: http://91.210.224.243:81/LAN-Messenger.bat

0
Erzesel  10.09.2020, 04:40
@123tu

https://pastebin.com/EJrbWs67

...Ich liebe solchen Spagetticode 🙄

Alles konnte ich nicht fixen... (ganz Nebenbei treibst du einfach zuviel Aufwand um ein Paar Variablen zu speichern... und auch das Schreiben einer 2. batch ist unnötig.

@echo off
chcp 65001 >nul & rem Ümlaute und Unicode anzeigen
  rem hier  alles initialisieren, was beiden Batches gemeinsam ist
set "demoVar=blubb"
set "oldnum=0"
set "self.num=0"
set "self.text="
echo ich werde in beiden Batchteilen angezeigt...


  rem entscheiden welcher batchteil ausgeführt wird
if "%1"=="second"  goto batchTeil2
:batchTeil1
title Rumpelheinz
  rem speichere alle Variablen welche mit self. beginnen in eine Datei
set self.>"data.txt"
set /p "demoVar2=gib was  ein : "  
  rem dieser Batchteil startet diese Batch nochmal mit dem parameter second
  rem %~f0 ist  die Variable für  den  vollen Pfad  der Batch
start "" cmd /c "%~f0" second
echo ich bin Code in Batch1


:loop
set /a "self.num+=1"
set /p "self.text=sende was : "
  rem Datei updaten
set self.>"data.txt"
goto loop
pause
exit /b


:batchTeil2
title Murmelprinz
echo ich bin Code in Batch2
set demoVar
echo  warte  auf Daten....
:loop2
  rem Variablen aus Speicherdatei einlesen
if exist "data.txt" for /f "usebackq tokens=*" %%a in ("data.txt") do ( set "%%a" )
if %self.num% gtr %oldnum% (
    echo %self.num%  text: %self.text%
    set "oldnum=%self.num%"
)
for /l %%. in (1,1,5000) do (call )
goto loop2
pause
exit /b

0
123tu 
Fragesteller
 11.09.2020, 06:49
@Erzesel

Ich bedanke mich recht herzlich bei dir. Vorallem dass du dir Die Zeit genommen hast.

Ich habe kaum Erfahrung mit Batch und mir sind bis jetzt nur die Grundfunktionen geläufig.

Trotzdem vielen vielen Dank. :D

0
123tu 
Fragesteller
 11.09.2020, 07:01
@123tu

Um es nochmal zu sagen, man hat wenige Leute wie dich in solch einem Forum. Du hast dir viel Zeit genommen um den gesamten Text zu verstehen und zu verbessern. Einfach TOP

0