hans87
Goto Top

Inhalt aus Text-Datei in Variablen schreiben mit batch

Hallo,

ich habe eine Textdatei, die wie folgt aufgebaut ist

name;definition
name;definition
name;definiton

da ich diese datei über ein batch skript erstelle, kann sie beliebig lang sein.

Jetzt würde ich gern für jede in der Datei vorhandene Zeile eine Datei Anlegen, die 2 Variablen enthält.
die erste Variable soll den Namen beinhalten, die zweite die Definiton.

habe schon sämtliche Foren durchsucht aber nichts gefunden was mir da weiterhilft
kann mir da jemand helfen?

Content-Key: 220866

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

Printed on: April 19, 2024 at 03:04 o'clock

Member: colinardo
colinardo Oct 31, 2013 updated at 07:53:20 (UTC)
Goto Top
Hallo chrisb87,
einfache FOR-Schleife sollte doch genügen:
@echo off & setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /f "usebackq tokens=1,2* delims=;" %%a in ("C:\Quelldatei.txt") do @(  
  echo Name:%%a Definition:%%b>>neuedatei_!cnt!.txt
  set /a cnt+=1
)
In %%a ist jeweils der Name und in %%b die Definition jeder Zeile enthalten.

Grüße Uwe
Member: Hans87
Hans87 Oct 31, 2013 at 08:13:29 (UTC)
Goto Top
Hallo Uwe,

zunächst danke für die schnelle Antwort, allerdings habe ich jetzt nur eine Ausgabedatei die wiefolgt aussieht:

Name:Beispiel1 Definition:Beispiel1-Definition
Name:Beispiel2 Definition:Beispiel2-Definition
Name:Beispiel3 Definition:Beispiel3-Definition

was ich eigentlich als Ausgabedatei gerne hätte wäre aber:

Datei1:

SET VAR1=Beispiel1
SET VAR2=Beispiel1-Definition

Datei2:
SET VAR1=Beispiel2
SET VAR2=Beispiel2-Definition


ist so etwas möglich?

Gruß Chris
Member: colinardo
colinardo Oct 31, 2013 updated at 09:45:00 (UTC)
Goto Top
@echo off & setlocal ENABLEDELAYEDEXPANSION
set /a cnt=1
for /f "usebackq tokens=1,2* delims=;" %%a in ("C:\Quelldatei.txt") do @(  
  echo set VAR1=%%a>neuedatei_!cnt!.txt
  echo set VAR2=%%b>>neuedatei_!cnt!.txt
  set /a cnt+=1
)
Member: Hans87
Hans87 Oct 31, 2013 at 08:32:13 (UTC)
Goto Top
jetzt bekomme ich 2 dateien,

in der einen stehen alle Namen und in der anderen alle Definitionen.

woher kommt denn das %%b?

denn ich will ja eigentlich eine datei haben in der VAR1 der name und VAR2 die dazugehörige definition ist.
Member: colinardo
colinardo Oct 31, 2013 at 09:12:47 (UTC)
Goto Top
kann aber nicht sein, hier gehts problemlos ...
Member: Hans87
Hans87 Oct 31, 2013 at 09:29:01 (UTC)
Goto Top
der counter funktioniert bei mir nicht... ich weiß aber nicht wieso
Member: colinardo
colinardo Oct 31, 2013 at 10:06:34 (UTC)
Goto Top
Zitat von @Hans87:
der counter funktioniert bei mir nicht... ich weiß aber nicht wieso
dann hast du das
setlocal ENABLEDELAYEDEXPANSION 
nicht mit eingebaut
Member: Hans87
Hans87 Oct 31, 2013 at 10:43:44 (UTC)
Goto Top
das ist der code:

setlocal ENABLEDELAYEDEXPANSION

SET FIND1=G:\Ausgabe\conf1_%LAND%_!counter!.txt




set /a counter=1
for /f "usebackq tokens=1* delims=;" %%a in (%OUTPUT%) do @(
echo set VAR1=%LAND%>>%FIND1%
echo set VAR2=%%a>>%FIND1%
echo set VAR3=%%b>>%FIND1%
set /a counter+=1
echo %counter%
)


aber der counter funktioniert nicht
Member: colinardo
colinardo Oct 31, 2013 updated at 11:04:52 (UTC)
Goto Top
oh jee, schmeiß den Code am besten ganz schnell weg, da sind zu viele Fehler drin. Erstens erzeugst du die Counter-Variable erst nach dem eigentlichen Verwenden und dann verwendest du Prozentzeichen in der FOR-Schleife um den Counter auszugeben. Du hast das Prinzip des Delayed Expansion noch nicht verstanden. Und in der FOR-Schleife hast du auch die tokens Parameter verändert...
so sollte das bei dir aussehen
setlocal ENABLEDELAYEDEXPANSION
set /a counter=1
SET "FIND1=G:\Ausgabe\conf1_%LAND%_"  
for /f "usebackq tokens=1,2* delims=;" %%a in ("%OUTPUT%") do @(  
  echo set VAR1=%LAND%>"%FIND1%!counter!.txt"  
  echo set VAR2=%%a>>"%FIND1%!counter!.txt"  
  echo set VAR3=%%b>>"%FIND1%!counter!.txt"  
  set /a counter+=1
)

und bitte benutze in Zukunft die Code-Tags hier im Forum um deinen Code zu formatieren, ansonsten gehen Sonderzeichen verloren.Danke.

Grüße Uwe
Member: Hans87
Hans87 Oct 31, 2013 at 15:22:36 (UTC)
Goto Top
jetzt funktioniert es. Aber wieso bekomme ich hinter jeder zeile die in der Ausgabe-datei dann ist ein leerzeichen?

das ist nämlich suboptimal, da ich ja mit den variablen weiterarbeiten will :/
Member: colinardo
colinardo Oct 31, 2013 updated at 15:44:27 (UTC)
Goto Top
wenn du meinen Code so wie er war übernommen hast darf dies eigentlich nicht sein. Wenn nicht, hast du sehr wahrscheinlich zwischen der Variablen und der Ausgabeumleitung ein Leerzeichen eingefügt:

So ist ein Leerzeichen hinter der Variablen in der Ausgabedatei
echo set VAR2=%%a >>"%FIND1%!counter!.txt"   
und so nicht:
echo set VAR2=%%a>>"%FIND1%!counter!.txt"   
Was auch noch sein kann ist das deine Quelldatei Leerzeichen zwischen den Semikolons hat. Wenn das der Fall ist muss man diese noch folgendermaßen eliminierenface-sadDabei dürfen dann aber weder Name noch Definition ein Leerzeichen enthalten, diese werden dann sonst auch entfernt)
  set name=%%a
  set name=!name: =!
  set definition=%%b
  set definition=!definition: =!
  echo set VAR1=!name!>>"%pfad%!cnt!.txt"  
  echo set VAR2=!definition!>>"%pfad%!cnt!.txt"  
  set /a cnt+=1

Grüße Uwe
Member: Hans87
Hans87 Nov 01, 2013 at 06:51:29 (UTC)
Goto Top
ich habe den code so wie er war übernommen. (habe keine Leerzeichen zwischen der variablen und der Ausgabeumleitung...
meine Quelldatei hat auch keine Leerzeichen zwischen den semikolons...
Member: Hans87
Hans87 Nov 01, 2013 at 07:18:48 (UTC)
Goto Top
ich hab den fehler gefunden...

hatte nach dem Anführungszeichen hinter txt überall leerzeilen drin.