cweinman
Goto Top

Verzeichnis aus Text Datei einlesen. Dort eine Datei manipulieren und das Ergebnis dann in eine neue Datei schreiben , dann aber in der nächsten Zeile weitermachen

Hallo zusammen,

in dem Thema Batch bin ich total unbefleckt, hab aber schon ein bischen was zusammengekriegt. Doch nun steck ich aber fest.

Mein Problem ist folgendes:

Ich habe eine Datei in der stehen Pfade zu Dateien drin:

Daten_verz.txt
C:\temp\adam\daten.txt
C:\temp\eva\daten2.txt
C:\temp\kain\daten3.txt
C:\temp\abel\daten4.txt

Was will ich nun damit?
Ich will, dass der Batch in den in der Datei "Daten_verz.txt" angegebenen Verzeichnissen die Datei "daten.txt" anfasst und die Zeilen dieser Dateien in einen neue Datei speichert.
Vorher soll noch interaktiv eine Kategorienummer eingegeben werden, die dann auch in die neue Datei geschrieben wird.

Folgendes hab ich:

set /p katnr=Bitte Kategorienummer eingeben: 
for /f %%a in (Daten_verz.txt) do set "datei=%%a"  
for /f "tokens=1,2,3,4 delims=;" %%i in (%datei%) do echo ;;%%j;;;;%katnr%;;%%i;%%l;;;;;;;;;;;;;%%k;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >>C:\temp\import_kat_%katnr%.txt  
pause

in der Daten.txt stehen einfach mehrere Zeilen drin. Delim ist ein Semikolon.

BSP.
Oil-Tank 1000 Litre;tank.jpg;Tankbeschreibung.pdf;;in AISI 333 - round vertical on a platform
Oil-Tank 5000 Litre;tank.jpg;Tankbeschreibung.pdf;;in AISI 231 - round vertical on a platform
Oil-Tank 1500 Litre;tank.jpg;Tankbeschreibung.pdf;;in AISI 132 - round vertical on a platform
Oil-Tank 2300 Litre;tank.jpg;Tankbeschreibung.pdf;;in AISI 321 - round vertical on a platform
Oil-Tank 160 Litre;tank.jpg;Tankbeschreibung.pdf;;in AISI 123 - round vertical on a platform

Ich bin ganz stolz, dass ich überhaupt ein Ergebnis rauskriege, aber das Problem ist, dass der Batch immer nur die letzte Datei in der "Daten_verz.txt" benutzt und nicht alle 4 Zeilen dieser Datei durchgeht mich für jede Zeile nach der Kategorienumer fragt, die Datei schreibt und dann mit der nächsten zeile weitermacht.
Im Forum hab ich schon gesucht, aber wenn man so garnicht weiß wie die Lösung aussehen könnte, dann isses schwierig.
Vielleicht könnt Ihr mir ja einen entscheidenden Denkanstoss geben!
Ich würd mich freuen

Schöne Grüße
Christian

Content-Key: 129167

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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: 60730
60730 11.11.2009 um 17:51:43 Uhr
Goto Top
Servus,

ungetestet...

set /p katnr=Bitte Kategorienummer eingeben:  
for /f %%a in (Daten_verz.txt) do (
                                                           for /f "tokens=1,2,3,4 delims=;" %%i in (%%a) do echo ;;%%j;;;;%katnr%;;%%i;%%l;;;;;;;;;;;;;%%k;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >>C:\temp\import_kat_%katnr%.txt   
)

"sollte" klappen.

for /f %%a in (Daten_verz.txt) do set "datei=%%a"
liesst "Daten_verz.txt" ein und setzt immer wieder "datei" mit dem letzten "fund" - du willst aber dazwischen auswerten - daher "so" - wie oben skizziert.

Gruß
Mitglied: cweinman
cweinman 11.11.2009 um 19:23:38 Uhr
Goto Top
Hai,

danke, passt schon fast. Aber ich brauch das so, dass er nach jeder Zeile der Datei "Daten_verz.txt" erneut nach der Kategorie fragt.
Also eine Zeile lesen, nach Kategorie fragen, Änderungen schreiben. Nächste Zeile lesen, wieder nach Kategorie fragen usw.

Geht das überhaupt in einer batch Datei?

Grüßle
Christian
Mitglied: bastla
bastla 11.11.2009 um 23:11:08 Uhr
Goto Top
Hallo cweinmann und willkommen im Forum!

Sollte sich so machen lassen:
for /f %%a in (Daten_verz.txt) do call :ProcessFile %%a
goto :eof

:ProcessFile
set /p katnr=Bitte Kategorienummer fuer "%1" eingeben:  
for /f "tokens=1,2,3,4 delims=;" %%i in (%1) do echo ;;%%j;;;;%katnr%;;%%i;%%l;;;;;;;;;;;;;%%k;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >>C:\temp\import_kat_%katnr%.txt  
goto :eof
Kurze Erklärung:
Der beim Aufruf des Unterprogramms ":ProcessFile" übergebene Dateipfad ("%%a") kommt dort als Parameter "%1" an. Mit dem ersten "goto :eof" wird das Hauptprogramm beendet (ansonsten würde das Unterprogramm nach der letzten Datei ein weiteres Mal durchlaufen werden). Das zweite "goto :eof" definiert das Ende des Unterprogramms (= Rücksprung in die Schleife des Hauptprogamms) und ist hier - als letzte Zeile im Batch - eigentlich unnötig, schadet aber nicht (und wäre erforderlich, falls etwa noch ein weiteres Unterprogramm unterhalb hinzugefügt würde).

Grüße
bastla
Mitglied: cweinman
cweinman 12.11.2009 um 08:13:26 Uhr
Goto Top
Hallo,

das hat mal super funktioniert. Dank Deiner Erklärung hab ich sogar kapiert.
Danke

Christian