trmxdevil
Goto Top

Mit Batch Datei 2 bestimmte Zeilen aus .ini verändern

Hallo Leute,
ich hab ein kleines Problem.
Ich habe eine ini datei, die ausser 2 voneinandere abhänige dinge immer gleich aussieht und zwar so:

vorher:
[Extern]
AnzRec=4
Rec1=[text]
Rec2=[text]
Rec3=[text]
Rec4=[text]

[Weitere Einträge......]

Was auch sein kann, ist das AnzRec=5 oder mehr ist, dann brauch ich natürlich AnzRec=6 oder mehr

Ich bräuchte jetzt eine Batchdatei, die die zahl hinter AnzRec= ausliest und dann diese um eins erhöht.
Dann muss die Batch auch noch unter Rec4 einen eintrag mit Rec5=TEST_TEXT erstellen.

Nachher:
[Extern]
AnzRec=5
Rec1=[text]
Rec2=[text]
Rec3=[text]
Rec4=[text]
Rec5=TEST_TEXT

Um raus zu bekommen, was hinter AnzRec= steht hab ich hier schonma einen schnipsel:

SET anzrec=""  
SET rec=""  

FOR /f "tokens=2 delims==" %%x in ('findstr "AnzRec" test.ini') do SET "anzrec_vor=%%x"  

SET /a rec="%anzrec%+1"  

Content-ID: 91645

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

Ausgedruckt am: 26.11.2024 um 18:11 Uhr

pumi32
pumi32 09.07.2008, aktualisiert am 18.10.2012 um 18:35:58 Uhr
Goto Top
Hi TRMxDEVIL
ich würde das auslesen folgendermaßen machen (deine version ist auch nicht schlecht):
for /f "delims=" %%a in ('find "AnzRec=" test.ini') do set x=%%a  
set anzrec=%x:~7,%
set /a rec=%anzrec%+1

Und zu dem ändern deiner datei müsste man so ansetzen:
for /f "delims=" %%a in ('type test.ini') do call :dateischreiben %%a  
:dateischreiben
if %1==AnzRec=%anzrec% (AnzRec=%rec%>> test_neu.ini
) else (
if %1==Rec%anzrec% (Rec%rec%=TEST_TEXT>> test_neu.ini
) else (
echo %1 >> test_neu.ini
))

bitte testen, habe grade keine zeit dafür, ich bin auch nicht sicher ob es bugfrei is, denke haben an alles gedacht

Nur genau da glaube ich liegt das gleiche problem an dem ich an meinem Punkt ebenfalls nicht weiterkommen:
Auslesen von 2 Werten aus einer Textdatei (in abhängigkeit vo suchkriterien)

zumindest ähnlich
TRMxDEVIL
TRMxDEVIL 10.07.2008 um 09:57:47 Uhr
Goto Top
Ja, das Problem ist ähnlich....
ich hab hier ausm Forum schonma einen schnippsel, der mir an die richtige stelle rec5 einsetzt.

Mein Problem ist jez "nur" noch AnzRec=5 zu setzen.

inhalt der test_neu.ini

[Extern]
AnzRec
Rec1
Rec2
Rec3
Rec4

Keine gleichheitszeichen mehr und auch kein text hinter xD.

Hier ma der komplette Batch, der schonma REC5 schreibt.

@echo off & setlocal 

set anzrec=""  
set rec=""  
set "Quelle=%homepath%\desktop\test.ini"   

cd "%homepath%\desktop\"  

for /f "tokens=2 delims==" %%x in ('findstr "AnzRec" "%Quelle%"') do set "anzrec=%%x"  

set rec=%anzrec%
set /a rec="%rec%+1"  
set "Mark=Rec%anzrec%="   
set "Insert=Rec%rec%=TEST_TEXT"  
set "TempTxt=%temp%\TT.txt"   

copy "%Quelle%" "%TempTxt%">nul   
del "%quelle%"  

set Zeile=0 
for /f "delims=:" %%i in ('findstr /n /i /b /c:"%Mark%" "%TempTxt%"') do set Zeile=%%i   


if %Zeile%==0 goto :Rest 
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%TempTxt%"') do if %%i leq %Zeile% echo.%%j>>"%Quelle%"  
echo %Insert%>>"%Quelle%"  


:Rest 
more +%Zeile% "%TempTxt%">>"%Quelle%"  

pause
pumi32
pumi32 10.07.2008 um 16:25:03 Uhr
Goto Top
Ich würde schätzen das hier nicht alles mitgeliefert wird:
for /f "delims=:" %%i in ('findstr /n /i /b /c:"%Mark%" "%TempTxt%"') do set Zeile=%%i

weil du dort unterteilst
wenn ich bei meinem prob weiter bin meld ich mich wieder, sonst kommt man nur noch mehr durcheinander ^^
Biber
Biber 10.07.2008 um 20:58:29 Uhr
Goto Top
Moin TRMxDEVIL

willkommen im Forum.

Finde ich äußerst vielversprechend, wie ihr (pumi32 und Du) euch hier durchzubeißen versucht.

Will es Euch auch gern allein zu Ende bringen lassen, aber ein paar Fallstricke, die eher einem geübten Auge auffallen, möchte ich aufzeigen... die findet ihr sonst erst nach Tagen.

Bezogen auf die Zeilennummern in TRMxDEVILs letztem Schnipsel

Zeile 03:/04
Set anzrec=""
> das setzt nicht die Variable %anzrec% auf {leer} oder löscht diese, sondern setzt die auf den Wert [zwei Anführungszeichen]
ist anders als in anderen Skriptsprachen, wo diese Syntax eher bedeuten würde: Setze String anzrec auf Leerstring.
Beide Zeilen sind überflüssig, da durch das "& setlocal" gesagt wurde: "verwende neu angelgte Variablen nur intern, lege keinen globalen Variablen an"

Zeile 05:
Genau hinschauen. Hier wird vermeintlich ein Komplett-Pfad gesetzt.
Aber die Laufwerksangabe fehlt. Also das "C:\" oder "D:\" oder "%HomeDrive%"

Ist gefährlich ... weil: niemand kann ausschließen , dass der Batch mal aufgerufen wird, wenn sich der geneigte User und mit ihm das Betriebssystem auf Laufwerk E, oder USB-Stick S: befindet.
Dann geht alles danach in die Grütze.

Zeile 07:
Ein "CD \pfad\nochmehrpfad" ist (wie im letzten Punkt angedeutet) immer suboptimal.
Außerdem wechselt man7frau nicht in einem Programmschnipsel Lw oder Pfad wenn nicht am Ende der Ur-zustand wiederhergestellt wird.
Ist sonst Pfusch. Redmond-Stil.Aäbäh eben.

Besser: Wenn es denn unbedingt sein muss, dann wechseln und wiederherstellen mit PushD/PopD [siehe PushD /? etc. am CMD-Prompt].
hier muss es gar nicht sein -- Lass die Zeile weg.


Zeile 17/18
Na, na, na... wer löscht denn da eine Quelldatei, bevor eine neue Zieldatei ohne Fehler erzeugt werden konnte??!!??
So was tut man/frau nicht. Ist sonst Pfusch. Re^H^H^H.... Rest siehe oben.

---> erst abwarten, ob wir eine neue Ersatzdatei hinbekommen.... bis dahin wird die Quell-Datei nur gelesen, nicht gelöscht.
Das Ersetzen der alten Ini-Datei durch eine neue erst ganz am Ende.

Zeile 21: hier wird es fehlerträchtig...(fast) immer habt ihr mit der SET-Syntax [Set "var=wert"], also mit Anführungszeichen gearbeitet.
Hier nun nicht. und prompt steht nach dem .."....DO .Set Zeile=%%i "<--- hier am Ende ein Leerzeichen nach %%i.

Besser hier (soll ja eine "numerische" Variable sein: ...Do Set /a zeile=%%i

Zeile 24:
Hier würde ich dann ändern auf
if %Zeile% EQU 0 goto .Rest
Wenn vorher %zeile% mit "SET /a " auf einen "arithmetischen" Wert gesetzt wurde, dann steht auch "numerisch null" drin bei Fehler.

Zeile 25
Würde ich so erweitern, dass alle drei Fälle ("%%i ist KleinerGleich, Gleich, größer als %zeile% ")abgefrühstückt werden.
Dann kann das "more"-Konstrukt in Zeile 30 entfallen.

....
:: REM Achtung: %Quelle% ist in meinem Ablauf NICHT gelöscht!! siehe oben
if exist "%tempTxt%" del "%tempTxt%"   
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%Quelle%"') do (  
      if %%i LEQ %Zeile% echo.%%j>>"%TempTxt%"   
      if %%i EQU %Zeile% echo.%INSERT%>>"%TempTxt%"  
      if %%i GTR %Zeile% echo.%%j>>"%TempTxt%"    
)
-oder- ^^... (kürzer würde auch genügen, sagen meine Praktikantinnen immer)..
....
:: REM Achtung: %Quelle% ist in meinem Ablauf NICHT gelöscht!! siehe oben
if exist "%tempTxt%" del "%tempTxt%"   
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%Quelle%"') do (  
      if %%i NEQ %Zeile% echo.%%j>>"%TempTxt%"   
      if %%i EQU %Zeile% echo.%INSERT%>>"%TempTxt%"  
)

So solltet ihr zumindest einen pfleg- und wartbaren Ausgangsbatch für evtl. Fehlersuche haben.

Grüße
Biber
pumi32
pumi32 11.07.2008 um 21:20:13 Uhr
Goto Top
Danke für die infos Biber
so dann fasse ich mal zusammen:

Es gibt noch kleine Probs:
Anzrec wird nicht erhöt und Rec4 wird ersetzt

@echo off & setlocal 

set "Quelle=%HomeDrive%%homepath%\desktop\test.ini"   

PushD "%HomeDrive%%homepath%\desktop\"  

for /f "tokens=2 delims==" %%x in ('findstr "AnzRec" "%Quelle%"') do set "anzrec=%%x"  

set rec=%anzrec%
set /a rec="%rec%+1"  
set "Mark=Rec%anzrec%="   
set "Insert=Rec%rec%=TEST_TEXT"  
set "TempTxt=%temp%\TT.txt"   

copy "%Quelle%" "%TempTxt%">nul  

set Zeile=0
for /f "delims=:" %%i in ('findstr /n /i /b /c:"%Mark%" "%TempTxt%"') do set /a "Zeile=%%i"  

if %Zeile% EQU 0 goto :Rest
:: REM Achtung: %Quelle% ist in meinem Ablauf NICHT gelöscht!! siehe oben
if exist "%tempTxt%" del "%tempTxt%"   
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%Quelle%"') do (  
      if %%i NEQ %Zeile% echo.%%j>>"%TempTxt%"   
      if %%i EQU %Zeile% echo.%INSERT%>>"%TempTxt%"  
)

:Rest 
more +%Zeile% "%TempTxt%">>"%Quelle%"  

:: if exist "%TempTxt%" del "%quelle%" 
pause
TRMxDEVIL
TRMxDEVIL 12.07.2008, aktualisiert am 18.10.2012 um 18:35:58 Uhr
Goto Top
Da das ganze auf das Ende zuläuft, ich hab fast ne lösung, nur noch nen "kleiner" Schönheitsfehler.
Hier ma die KOMPLETTE ORGINAL INI.

[Extern]
AnzRec=4
Rec1=BG-Abrechnung, bg
Rec2=Krankenblattübersicht Patient, ..\..\prog\wprog\kspat
Rec3=Dauerdiag./-medi. absetzen, ..\..\prog\wprog\diamedab
Rec4=BG-Geb.Ord. „ndern, ..\..\prog\wprog\bgupd

[KVK]
Port=-1

Dos=0
PortMobil=0
[Word]
Word=1

[ZMS]
ZMS=1

[KB-Farbe]
A=
B=
D=000,128,192
DD=128,128,192
DM=
F=
G=
L=
M=
N=
S=
T=
Z=255,000,000
U=192,192,192
H=255,255,255

[Formulare]
HMV=0

[SELBUTTON]
BUTTON15=34

So mit dieser Batch (noch nicht angepasst an die Version von euch bzw an die Korrektur vorschläge von Biber, der orginal schnippsel war übrigens von Bastla Mittels Batch an bestimmte Stelle der win.ini schreiben :-P) läuft alles soweit, bis auf den Schönheitsfehler, überall wo eigentlich eine Leerezeile wäre, ist nachher im Test.txt der vorherige eintrag doppelt.

@echo off & setlocal 

set anzrec=
set rec=
set "Quelle=%homepath%\desktop\test.ini"   

cd "%homepath%\desktop\"  

for /f "tokens=2 delims==" %%x in ('findstr "AnzRec" "%Quelle%"') do set "anzrec=%%x"  

set rec=%anzrec%
set /a rec="%rec%+1"  
set "Mark=Rec%anzrec%="   
set "Insert=Rec%rec%=TEST_TEXT"  
set "TempTxt=%temp%\TT.txt"   

REM Jez ist hier "nur" rename ;)  
copy "%Quelle%" "%TempTxt%">nul   
ren "%Quelle%" test.ini.backup  

set Zeile=0 
for /f "delims=:" %%i in ('findstr /n /i /b /c:"%Mark%" "%TempTxt%"') do set Zeile=%%i   


if %Zeile%==0 goto :Rest 
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%TempTxt%"') do if %%i leq %Zeile% echo.%%j>>"%Quelle%"  
echo %Insert%>>"%Quelle%"  


:Rest 
more +%Zeile% "%TempTxt%">>"%Quelle%"  

pause

findstr /n .* test.ini > test_n.ini

REM nur zu Testzwecken, damit das Test.txt übersichtlich bleibt....
IF EXIST test.txt DEL test.txt


set zeile=0
set zahl=1
set ausgabe=abc

for /f "tokens=1 delims=:" %%i in ('findstr : test_n.ini') do set "zeile=%%i"  

set /a zeile=%zeile%+1
echo Zeilen = %zeile%

:while
for /f "tokens=2 delims=:" %%x in ('findstr /b /l %zahl%: test_n.ini') do set "ausgabe=%%x"  


IF %zahl% == 2 (echo AnzRec=%rec% >> test.txt) else (echo %ausgabe% >> test.txt) 

set /a zahl=%zahl%+1
IF NOT %zahl% == %zeile% goto while

pause

Ich denke ich hoffe ich find am WE die zeit hier rein zugucken, kann nichts versprechen.

Edit1:
Quelle auf dem Dekstop ist nur zur Testphase.
Beim späterem Einsatz, wird mit 2 eingaben ermittelt wo die Datei ist.
Den jeder Rechner, auf dem die Batch später ausgeführt wird, hat auf dem Server ein Userverzeichnis, welches immer unterschiedlich ist.

Ich kann ja ma hinterher (wenn das hier gelöst ist) den kompletten Batch posten. Der Batch bearbeitet 3 verschiedene ini Dateien.
Nur den hab ich gerade net hier, der kommt frühstens Montag.

Edit2:
Ich habs, war wieder nur so nen kleiner fehler.
:while
for /f "tokens=2 delims=:" %%x in ('findstr /b /l %zahl%: test_n.ini') do set "ausgabe=%%x"  


IF %zahl% == 2 (echo AnzRec=%rec% >> test.txt) else (echo %ausgabe% >> test.txt) 

set /a zahl=%zahl%+1
IF NOT %zahl% == %zeile% goto while
das muss mit dem ersetzt werden.
:while
set ausgabe-a=%ausgabe%
for /f "tokens=2 delims=:" %%x in ('findstr /b /l %zahl%: test_n.ini') do set "ausgabe=%%x"  


IF "%ausgabe%" == "%ausgabe-a%" (echo. >> test.txt) else (IF %zahl% == 2 (echo AnzRec=%rec% >> test.txt) else (echo %ausgabe% >> test.txt))  

set /a "zahl=%zahl%+1"  
IF NOT %zahl% == %zeile% goto while
Einfach noch ne ausgabe-a für die alte ausgabe eingerichtet, verglichen und wenn die gleich ist einfach ne leerzeile.

Danke Leute ;)
Montag Poste ich hier ma den gesamten Batch.

Mfg
TRMxDEVIL
pumi32
pumi32 12.07.2008 um 11:22:51 Uhr
Goto Top
schön helfen zu können TRMxDEVIL

kannst bei der Batch auch dabeischreiben für welche Zwecke sich das ändert (ini-dateien für ein programm oder auch reg-einträge)
evtl überscrift so abändern!
mfg
pumi32
TRMxDEVIL
TRMxDEVIL 14.07.2008 um 13:26:37 Uhr
Goto Top
Hier mal wie versprochen, der gesamt Batch, auch mit den Richtigen einträgen, so wird der später ablaufen, bei der neu Installation eines Programmes.
Durch den Batch wird ne GDT-Verbindung zwischen den beiden Programmen ermöglicht.

@ECHO off

REM pfad und User eingabe

ECHO.
:pfadeing
ECHO DOCcomfort Pfad angeben (z.b) F:\doc2   :
SET /P pfad=

IF NOT EXIST %pfad% ECHO Der Pfad ist ungültig. & goto pfadeing

ECHO.
:usereing
ECHO Bitte den User angeben:
SET /P user=
IF NOT EXIST %pfad%\user\%user%\ ECHO Der User existiert nicht. & goto usereing

ECHO.

REM abfragen, ob ein backup vorhanden ist.

IF EXIST %pfad%\user\%user%\degexport.ini.back (
	ECHO degexport.ini wurde eventuell schon bearbeitet. 
	ECHO Bitte Löschen Sie falls vorhanden die [VFA] einträge!
	ECHO Und starten Sie die Autoanbindung neu

REM ping localhost als Wartezeit

	ping localhost /n 6 >nul 
	%pfad%\user\%user%\degexport.ini & del %pfad%\user\%user%\degexport.ini.back & goto dc4j
	ECHO.)


IF EXIST %temp%\degexport.ini DEL %temp%\degexport.ini
XCOPY %pfad%\user\%user%\degexport.ini %temp% >nul
IF NOT EXIST %pfad%\user\%user%\degexport.ini.koback REN %pfad%\user\%user%\degexport.ini degexport.ini.koback
CD %temp%

IF EXIST %pfad%\user\%user%\degexport.ini DEL %pfad%\user\%user%\degexport.ini
XCOPY degexport.ini %pfad%\user\%user%\ >nul
REN %pfad%\user\%user%\degexport.ini degexport.ini.back

REM Die GDT einstellungen ans ende von degexport.ini schreiben

ECHO. >> degexport.ini
ECHO [VFA] >> degexport.ini
ECHO Titel=VFA >> degexport.ini
ECHO Exe=C:\Programme\ICW\VFA\Client\CmdLTran.exe /Action:ALLG00 /InputFile=C:\VFA\GDT\VFAin.gdt /OutputFile=C:\VFA\GDT\VFAout.gdt /Start:C:\Programme\ICW\VFA\Client\Icw.Aragon.AragonLight.exe >> degexport.ini
ECHO CallExe=C:\Programme\ICW\VFA\Client\CmdLTran.exe /Action:ALLG00 /InputFile=C:\VFA\GDT\VFAin.gdt /OutputFile=C:\VFA\GDT\VFAout.gdt /Start:C:\Programme\ICW\VFA\Client\Icw.Aragon.AragonLight.exe >> degexport.ini
ECHO GDTDatei=C:\VFA\GDT\VFAin.gdt >> degexport.ini
ECHO PollDir=C:\VFA\GDT >> degexport.ini
ECHO PollMask=VFAout.gdt >> degexport.ini
ECHO Satzart=6302 >> degexport.ini
ECHO Call=6310 >> degexport.ini
ECHO Typ=VFA >> degexport.ini
ECHO CallTyp=ALLG00 >> degexport.ini
ECHO InternePatNr=1 >> degexport.ini
ECHO UseDOS=0 >> degexport.ini
ECHO. >> degexport.ini


REM Zurück Kopieren
XCOPY degexport.ini %pfad%\user\%user%\ >nul
DEL degexport.ini>nul

ECHO Die degexport.ini wurde erfolgreich bearbeitet.
ECHO Die Orginale degexport.ini ist nun degexport.ini.koback
ECHO.

REM	DC4J.INI NEU SCHREIBEN BZW BEARBEITEN.


:dc4j
ECHO dc4j.ini wird bearbeitet.
IF EXIST %pfad%\daten\data\export\dc4j.ini.back (
	ECHO DC4J.ini wurde eventuell schon bearbeitet. 
	ECHO Bitte Löschen Sie falls vorhanden die DIR*=C:vfa.. einträge!
	ECHO Und starten Sie die Autoanbindung neu

REM ping localhost als Wartezeit

	ping localhost /n 6 >nul 
	%pfad%\daten\data\export\dc4j.ini & del %pfad%\daten\data\export\dc4j.ini.back & goto docfest.ini
	ECHO.)


IF NOT EXIST "%pfad%\daten\data\export\dc4j.ini" goto neu  

ECHO.
ECHO dc4jn.ini existiert bereits, wird angepasst.

CD "%temp%"  

SET dir=""  
SET ndir=""  
SET var=""  
SET "Quelle=%pfad%\daten\data\export\dc4j.ini"  
SET "TempTxt=%temp%\TT1.txt"   

IF EXIST %TempTxt% DEL %TempTxt% >nul
COPY "%Quelle%" "%TempTxt%">nul   
REN "%Quelle%" dc4j.ini.kocback  
COPY "%TempTxt%" "%pfad%\daten\data\export\">nul  
REN "%pfad%\daten\data\export\tt1.txt" dc4jn.ini.back  


FOR /f "tokens=1 delims==" %%x in ('FINDSTR "DIR" %TempTxt%') do (  
SET "dir=%%x")  
ECHO %dir%> dir.txt
FOR /f "tokens=2 delims=R" %%y in ('FINDSTR "DIR" dir.txt') do SET "var=%%y"  

SET dir=%var%
SET /a ndir="%dir%"+1  
SET "Mark=DIR%dir%="   
SET "Insert=DIR%ndir%=C:\vfa\gdt#*.gdt#100###"  

DEL dir.txt

SET Zeile=0 
FOR /f "delims=:" %%i in ('FINDSTR /n /i /b /c:"%Mark%" "%TempTxt%"') do SET Zeile=%%i   

IF %Zeile%==0 goto :Rest 
FOR /f "tokens=1* delims=:" %%i in ('FINDSTR /n $ "%TempTxt%"') do if %%i leq %Zeile% ECHO.%%j>>"%Quelle%"  
ECHO %Insert%>>"%Quelle%"  


:Rest 
MORE +%Zeile% "%TempTxt%">>"%Quelle%  


:neu
CD %temp%
ECHO.
ECHO dc4j.ini wird komplett geschrieben.
ECHO [IMPORT] >> dc4j.ini
ECHO DIR1=c:\vfa\gdt#*.gdt#100### >> dc4j.ini
ECHO INLINE=TRUE >> dc4j.ini
ECHO  >> dc4j.ini
ECHO INLINE=TRUE >> dc4j.ini
ECHO PATNREXTERN=FALSE >> dc4j.ini
ECHO CHECKNAME=FALSE >> dc4j.ini
ECHO COLLECT=FALSE >> dc4j.ini
ECHO USEDOS=0 >> dc4j.ini
ECHO USECRLF=0 >> dc4j.ini
ECHO KARTEIDATUM=0 >> dc4j.ini
ECHO ANWENDER= >> dc4j.ini
ECHO LOOKFOR= >> dc4j.ini
ECHO RUBRIK= >> dc4j.ini
ECHO BEFUNDTEXT= >> dc4j.ini
ECHO PFAD6301= >> dc4j.ini
ECHO KARTEI= >> dc4j.ini

MD %pfad%\daten\data\export>nul
MD %pfad%\daten\data\export\Err>nul

COPY dc4j.ini %pfad%\daten\data\export>nul
DEL dc4j.ini>nul
ECHO ERSTE DC4J.INI, deswegen kein backup!!! > dc4j.ini.back
COPY dc4j.ini.back %pfad%\daten\data\export>nul
ECHO dc4j.ini wurde erfolgreich erstellt.


:docfest.ini
ECHO.
ECHO docfest.ini wird bearbeitet.
ECHO.

REM abfragen, ob ein backup vorhanden ist.

IF EXIST %pfad%\user\%user%\docfest.ini.back (
	ECHO docfest.ini wurde eventuell schon bearbeitet. 
	ECHO Bitte Löschen Sie falls vorhanden die RecX=Hausarzt einträge!
	ECHO Und starten Sie die Autoanbindung neu

REM ping localhost als Wartezeit

	ping localhost /n 6 >nul 
	%pfad%\user\%user%\docfest.ini & del %pfad%\user\%user%\docfest.ini.back & goto exit)

SET anzrec=
SET rec=
SET "festquelle=%pfad%\user\%user%\docfest.ini"  
SET "festtemptxt=%temp%\docfest.ini"   

IF EXIST %festtemptxt% DEL %festtemptxt%
XCOPY %pfad%\user\%user%\docfest.ini %temp%>nul
IF NOT EXIST %pfad%\user\%user%\docfest.ini.koback REN %pfad%\user\%user%\docfest.ini docfest.ini.koback>nul
CD %temp%

XCOPY docfest.ini %pfad%\user\%user%\>nul
REN %pfad%\user\%user%\docfest.ini docfest.ini.back>nul

FOR /f "tokens=2 delims==" %%x in ('FINDSTR "AnzRec" "docfest.ini"') do SET "anzrec=%%x"  

SET rec=%anzrec%
SET /a rec="%rec%+1"  
SET "festmark=Rec%anzrec%="   
SET "festinsert=Rec%rec%=Hausarzt+, ..\..\prog\wprog\rungdt.exe /k:VFA /s:1"  


SET festzeile=0 
FOR /f "delims=:" %%i in ('FINDSTR /n /i /b /c:"%festmark%" "%festtemptxt%"') do SET festzeile=%%i   


IF %festzeile%==0 GOTO :festRest 
FOR /f "tokens=1* delims=:" %%i in ('FINDSTR /n $ "%festtemptxt%"') do IF %%i leq %festzeile% ECHO.%%j>>"%festquelle%"  
ECHO %festinsert%>>"%festquelle%"  

:festRest 
MORE +%festzeile% "%festtemptxt%">>"%festquelle%"  

FINDSTR /n .* %festquelle% > docfest_n.ini

SET festzeile=0
SET zahl=1
SET ausgabe=abc

FOR /f "tokens=1 delims=:" %%i in ('FINDSTR : docfest_n.ini') do SET "festzeile=%%i"  

SET /a festzeile=%festzeile%+1

ECHO
ECHO Wenn mehr als 55 festzeilen angezeigt werden, ist was schief gelaufen xD
ECHO festzeilen = %festzeile%

:while
SET "ausgabe-a=%ausgabe%"  
FOR /f "tokens=2 delims=:" %%x in ('FINDSTR /b /l %zahl%: docfest_n.ini') do SET "ausgabe=%%x"  

IF "%ausgabe%" == "%ausgabe-a%" (ECHO.  >> ndocfest.ini) else (IF %zahl% == 2 (ECHO AnzRec=%rec% >> ndocfest.ini) else (ECHO %ausgabe% >> ndocfest.ini))  

SET /a "zahl=%zahl%+1"  
IF NOT %zahl% == %festzeile% GOTO while

DEL %pfad%\user\%user%\docfest.ini
COPY ndocfest.ini %pfad%\user\%user%\docfest.ini>nul
DEL ndocfest.ini

PING localhost /n 10>nul

:exit
exit