nieisi
Goto Top

Batch Absturz, aber immer nach einer Zeit

Hallo zusammen :D

ich habe mir da ein Programm über Batch zusammen geschustert die immer gut funktioniert und mich in verschiedenen Situationen begleitet. Nun entsteht mir das Problem, wenn ich diese ausführe, stürzt die Batch immer nach genau der siebten zeile ab.
Das ziel in der Batch ist ziemlich einfach, es soll eine txt Datei einlesen und dann Zeile für Zeile in eine neue txt ausgeben. Der Hakne dadran, es soll vor jeder Zeile ein Wert stehen.
Momentan findet ein Umzug statt mit tausenden von Dokus und jede davon benötigt nun einen neuen Wert im Vorgang um richtig erfasst werden zu können.
Ich finde momenatn einfach nicht den Fehler, woran es liegen kann, villeicht sehe ich den Wald vor lauter Bäume einfach nicht.
Die Batch soll eine Pause mit Benutzer Aktion bei Zeile # stoppen, daher die Pause.

Villeicht sieht von euch jemand den Fehler und verbleibe ertsmal mit Lieben Grüßen :D

@echo off

:controll
echo. 
echo Text wird verarbeitet...
echo Dokument?
set /p DateiIm=
set LineNo=1
set /a lineno-=1

:controll1
set "A1="  
echo.
for /f "tokens=*" %%d in ('more/e +%LineNo% ^< %DateiIm%.txt') DO ( if not defined A1 set "A1=%%d" )  
echo.
echo Zeile: %A1%
echo Daten werden geladen...
echo.
if "%A1%" == "#" goto pause  
echo echo %A1% >> %DateiIm%EX.txt

:sett
set /a lineno=%lineno%+1
goto controll1


:pause
pause
goto sett

Content-Key: 601933

Url: https://administrator.de/contentid/601933

Printed on: April 25, 2024 at 16:04 o'clock

Member: rubberman
Solution rubberman Sep 04, 2020 updated at 19:16:10 (UTC)
Goto Top
Der Hakne dadran, es soll vor jeder Zeile ein Wert stehen.

Was meinst du mit Wert? Dein zusätzliches "echo"?

Nun entsteht mir das Problem, wenn ich diese ausführe, stürzt die Batch immer nach genau der siebten zeile ab.

Könnte daran liegen dass in deiner Datei Zeichen stehen, die besondere Bedeutungen in Batch haben. So etwas wie <>| oder &.

Probier mal was in der Art:
@echo off &setlocal DisableDelayedExpansion

:: Ich gehe mal von einer Datei "test.txt" aus. Du kannst wieder dein SET /P hinein basteln ... 
set "filename=test"  

>"%filename%EX.txt" (  
  for /f "delims=" %%i in ('findstr /n "^" "%filename%.txt"') do (  
    set "line=%%i"  
    setlocal EnableDelayedExpansion
    set "line=!line:*:=!"  
    if "!line!"=="#" (  
      1>&2 pause
    ) else (
      echo echo !line!
    )
    endlocal
  )
)
Steffen
Member: nieisi
nieisi Sep 04, 2020 at 19:53:16 (UTC)
Goto Top
Guten Abend Steffen,

Danke für deine schnelle Rückmeldung. Ich habe deinen Code genutzt und mit einer Tesdatei ausprobiert und es funktioniert einwandfrei.
Da ich eigentlich mit Linux groß geworden bin, habe ich mit Batch nicht so viel am Hut gehabt, muss aber auf jeden Fall mal schauen, dass ich mich mit diesem Code ausseinander setze.

Schicken Abend noch und bleib Gesund face-smile
Member: rubberman
rubberman Sep 04, 2020 at 20:23:17 (UTC)
Goto Top
Gern. Aber bevor du dich zu sehr mit Batch beschäftigst, mache das lieber mit der PowerShell. Nicht nur dass Batch quasi tot ist und es nahezu unmöglich ist narrensicheren Code zu schreiben, wird dir der Umstieg von bash Shellscripts auf die PowerShell vermutlich leichter fallen.

Steffen