Supportnet / Forum / BS-Sonstige
Textdatei auslesen...???
Frage
Hallo,
ich bin nicht gerade ein Profi was Batch Programmierung angeht!
Ich würde gerne folgendes realisieren:
c:\eigene Dateien\|Sicherung Eigene Dateien|User1
c:\win95|Sicherung Systemfiles|User2
...
...
aus dieser Textdatei mit evtl. mehr Zeilen sollen nacheinander die 3 Segmente, getrennt durch dieses Zeichen "|", jeweils einer Variable zugeordnet werden.
Das Dateiende der Textdatei soll mit ":END" gekennzeichnet werden.
Ist das ohne weiteres mögich?
Danke schonmal im voraus...
MFG kinglazee
P.S. Super Forum in sachen DOS, hab beim letzten prob sofort Hilfe bekommen und es ging auch alles sofort! LOB!
Antwort 1 von manei
Hallo,
es ist fast alles möglich.
Nur dieses Zeichen " | " ist ein interner fest verankerter DOS- bzw. Batchbefehl, der evtl. bei der Abfrage aktiviert werden und eine Fehlermeldung verursachen könnte. Ich würde vorschlagen, dafür ein anderes Zeichen zu nehmen (evtl. ~ ).
Habe ich Dich richtig verstanden, Du hast in einer Textdatei wie o.a. eine oder mehrere Zeilen stehen. Jede Zeile soll ausgelesen, nach den genannten Kriterien getrennt und danach verarbeitet werden. Danach kommt die nächste Zeile dran usw. bis alle Zeilen ausgelesen sind.
Dateiende ist nomalerweise das EoF (EndofFile als unsichtbares, von der Textverarbeitung aber lesbares Zeichen definiert). Wo oder was also bitte soll mit End gekennzeichnet werden.
Das allerwichtigste nun aber zum Schluß:
Welches Betriebsystem hast Du????
Hast Du Win9X(95/98/ME) oder WinNT/2000/XP.
Für Dein Problem sind das ganz unterschiedliche Vorgehensweisen bei der Lösung/Programmgestaltung.
MfG maneich
es ist fast alles möglich.
Nur dieses Zeichen " | " ist ein interner fest verankerter DOS- bzw. Batchbefehl, der evtl. bei der Abfrage aktiviert werden und eine Fehlermeldung verursachen könnte. Ich würde vorschlagen, dafür ein anderes Zeichen zu nehmen (evtl. ~ ).
Habe ich Dich richtig verstanden, Du hast in einer Textdatei wie o.a. eine oder mehrere Zeilen stehen. Jede Zeile soll ausgelesen, nach den genannten Kriterien getrennt und danach verarbeitet werden. Danach kommt die nächste Zeile dran usw. bis alle Zeilen ausgelesen sind.
Dateiende ist nomalerweise das EoF (EndofFile als unsichtbares, von der Textverarbeitung aber lesbares Zeichen definiert). Wo oder was also bitte soll mit End gekennzeichnet werden.
Das allerwichtigste nun aber zum Schluß:
Welches Betriebsystem hast Du????
Hast Du Win9X(95/98/ME) oder WinNT/2000/XP.
Für Dein Problem sind das ganz unterschiedliche Vorgehensweisen bei der Lösung/Programmgestaltung.
MfG maneich
Antwort 2 von kinglazee
erstmal danke für die Hilfe...
okay, mit einem Sinus Zeichen (~) käme ich auch zurecht. Die kriterien hast du genau richtig aufgefasst und beschrieben, mein Betriebssystem basiert auf NT Basis und ist WinXP.
Das Dateiende als EoF wäre auch okay, mit der Zeile ":END" wollte ich nur erreichen dass man ohne zeilen zu löschen einfach mal zwischen den schon vorhanden Zeilen einfach dieses ":END" einfügt und damit den ablauf der weiteren verarbeitung der Textdatei abbricht! So kann ich ohne weiteres mal ein paar Zeilen übergehen ohne sie aus der Datei konkret zu löschen. Wäre aber wie schon gesagt nicht tragisch wenn ich über das EoF arbeiten würde!
Hast du dazu eine gute lösung?
Danke im vorraus...
MFG kinglazee
okay, mit einem Sinus Zeichen (~) käme ich auch zurecht. Die kriterien hast du genau richtig aufgefasst und beschrieben, mein Betriebssystem basiert auf NT Basis und ist WinXP.
Das Dateiende als EoF wäre auch okay, mit der Zeile ":END" wollte ich nur erreichen dass man ohne zeilen zu löschen einfach mal zwischen den schon vorhanden Zeilen einfach dieses ":END" einfügt und damit den ablauf der weiteren verarbeitung der Textdatei abbricht! So kann ich ohne weiteres mal ein paar Zeilen übergehen ohne sie aus der Datei konkret zu löschen. Wäre aber wie schon gesagt nicht tragisch wenn ich über das EoF arbeiten würde!
Hast du dazu eine gute lösung?
Danke im vorraus...
MFG kinglazee
Antwort 3 von manei
Hallo,
so einfach wie Du dir das vorstellst ist das alles nicht.
Du kannst in einer Datei nicht so einfach Zeilen dazwischen löschen.
Genau so kannst Du nicht so einfach mal ein End oder EOF zwischen die Zeilen setzen.
Z.B. Deine Datei nennt sich "test.txt", dann kannst Du mit
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
Damit hast du Deine 3 Blöcke getrennt und mußt jetzt in ablauf bestimmen, was damit gemacht werden soll. In ablauf werden %%i %%j %%k zu %1 %2 %3.
:ablauf
Hier kannst du nun bestimmen was mit %1 %2 %3 passieren soll.
Damit werden alle Zeilen dieser Datei abgearbeitet. Wenn du nun nur einige Zeilen dieser Datei abarbeiten willst, gibt es in der Zeile for /f die Möglichkeit mit ship x(ZeilenNr,) zu dieser Zeile zu springen und oder Rest abzuarbeiten und/oder mit z.B end~end~end nach der letzen Zeile die verarbeitet werden soll zu bestimmen welche Zeile die letzte sein soll.
Dann fragst Du in :ablauf als erstes ab ob ende ist mit
if %1==end exit
Wenn Du Dein Problem nicht genauer beschreibst, kann Dir auch keiner eine genauere Erklärung dazu geben.
MfG maneich
so einfach wie Du dir das vorstellst ist das alles nicht.
Du kannst in einer Datei nicht so einfach Zeilen dazwischen löschen.
Genau so kannst Du nicht so einfach mal ein End oder EOF zwischen die Zeilen setzen.
Z.B. Deine Datei nennt sich "test.txt", dann kannst Du mit
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
Damit hast du Deine 3 Blöcke getrennt und mußt jetzt in ablauf bestimmen, was damit gemacht werden soll. In ablauf werden %%i %%j %%k zu %1 %2 %3.
:ablauf
Hier kannst du nun bestimmen was mit %1 %2 %3 passieren soll.
Damit werden alle Zeilen dieser Datei abgearbeitet. Wenn du nun nur einige Zeilen dieser Datei abarbeiten willst, gibt es in der Zeile for /f die Möglichkeit mit ship x(ZeilenNr,) zu dieser Zeile zu springen und oder Rest abzuarbeiten und/oder mit z.B end~end~end nach der letzen Zeile die verarbeitet werden soll zu bestimmen welche Zeile die letzte sein soll.
Dann fragst Du in :ablauf als erstes ab ob ende ist mit
if %1==end exit
Wenn Du Dein Problem nicht genauer beschreibst, kann Dir auch keiner eine genauere Erklärung dazu geben.
MfG maneich
Antwort 4 von kinglazee
Also ich habe das mal gerade getestet, ich erreiche momentan eigentlich recht wenig damit.
Ich will als Test einfach mal nur die einzelnen Paramter %1 %2 %3 über den Befehl ECHO anzeigen lassen, und dazu wäre noch ganz gut die Zeilennummer %4 (Variablen können auch anders heißen; Spalte1-3, ZeilenNR)
den rest werde ich dann von alleine hinbekommen.
Soll als Test Dienen da ich damit noch weitere andere Dinge vorhabe.
Meine Textdatei sieht jetzt so aus:
c:\eigene Dateien\~Sicherung Eigene Dateien~User1
c:\win95~Sicherung Systemfiles~User2
Bin für jede weitere Hilfe sehr Dankbar!
MFG kinglazee
Ich will als Test einfach mal nur die einzelnen Paramter %1 %2 %3 über den Befehl ECHO anzeigen lassen, und dazu wäre noch ganz gut die Zeilennummer %4 (Variablen können auch anders heißen; Spalte1-3, ZeilenNR)
den rest werde ich dann von alleine hinbekommen.
Soll als Test Dienen da ich damit noch weitere andere Dinge vorhabe.
Meine Textdatei sieht jetzt so aus:
c:\eigene Dateien\~Sicherung Eigene Dateien~User1
c:\win95~Sicherung Systemfiles~User2
Bin für jede weitere Hilfe sehr Dankbar!
MFG kinglazee
Antwort 5 von kinglazee
also, mittlerweile hab ich noch ein bischen mehr rumgespielt, habe es hinbekommen... Danke!
Aber der Part mit dem Anspringen einzelner Zeilen bekomm ich nicht so richtig hin.
Wie funktioniert das wenn ich jetzt einfach in der Textdatei die 2. Zeile auslesen will und die einzelnen Blöcke wieder mit ECHO anzeigen lassen will, die Zeilennummer sollte nach möglichkeit eine Variable sein.
Die Zeilennummer werde ich nachher abbfragen mit WBAT.com und bekomme die Zeilennummer in Form von einer Variable.
Kannst du mir da noch weiter Helfen?
Wäre sehr dankbar!
MFG kinglazee
Aber der Part mit dem Anspringen einzelner Zeilen bekomm ich nicht so richtig hin.
Wie funktioniert das wenn ich jetzt einfach in der Textdatei die 2. Zeile auslesen will und die einzelnen Blöcke wieder mit ECHO anzeigen lassen will, die Zeilennummer sollte nach möglichkeit eine Variable sein.
Die Zeilennummer werde ich nachher abbfragen mit WBAT.com und bekomme die Zeilennummer in Form von einer Variable.
Kannst du mir da noch weiter Helfen?
Wäre sehr dankbar!
MFG kinglazee
Antwort 6 von manei
Hallo,
mit skip=1 in Deinem Fall überspringst Du die erste Zeile. Dies baust du in der for-Zeile mit ein. Es wird also immer die Anzahl der Zeilen, die übersprungen werden sollen, angegeben.
Die Zeilen-Nr. könnte man über die zu überspringende(n) Zeile(n) definieren mit
set /a x1=1
for /f "tokens=1,2,3 delims=~ skip=%x1%" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
:ablauf
set /a x1=%x1%+1
echo %x1% %1
echo %x1% %2
echo %x1% %3
pause
Eine Ziffer oder Zahl allein kann keine Variable sein. Du könntest das aber zusammen mit enem Buchstaben machen, z.B. a2 also mit a%x1%.
Hast du noch weitere Zeilen in der Datei, werden diese, außer der ersten Zeile in diesem Fall, natürlich auch abgearbeitet. Das kannst du lösen, indem Du in :ablauf bei nur einer Zeile als letze Zeile exit oder bei mehreren Zeilen über einen Zähler z.B. %x1% if %x1%==2 exit einträgst.
MfG maneich
mit skip=1 in Deinem Fall überspringst Du die erste Zeile. Dies baust du in der for-Zeile mit ein. Es wird also immer die Anzahl der Zeilen, die übersprungen werden sollen, angegeben.
Die Zeilen-Nr. könnte man über die zu überspringende(n) Zeile(n) definieren mit
set /a x1=1
for /f "tokens=1,2,3 delims=~ skip=%x1%" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
:ablauf
set /a x1=%x1%+1
echo %x1% %1
echo %x1% %2
echo %x1% %3
pause
Eine Ziffer oder Zahl allein kann keine Variable sein. Du könntest das aber zusammen mit enem Buchstaben machen, z.B. a2 also mit a%x1%.
Hast du noch weitere Zeilen in der Datei, werden diese, außer der ersten Zeile in diesem Fall, natürlich auch abgearbeitet. Das kannst du lösen, indem Du in :ablauf bei nur einer Zeile als letze Zeile exit oder bei mehreren Zeilen über einen Zähler z.B. %x1% if %x1%==2 exit einträgst.
MfG maneich
Antwort 7 von kinglazee
danke für die Hilfe...
Mit der ersten von dir geposteten Anweisung hab ich noch en kleines Prob, in der Textdatei sind werden Pfade verwendet die Leerzeichen enthalten, sobald eines irgendwo in der Zeile ist, dann sieht er es als einzelnen Block.
Bekommt man das so hin dass die Leerzeichen wie ganz normaler Text gehandhabt werden?
MFG kinglazee
Mit der ersten von dir geposteten Anweisung hab ich noch en kleines Prob, in der Textdatei sind werden Pfade verwendet die Leerzeichen enthalten, sobald eines irgendwo in der Zeile ist, dann sieht er es als einzelnen Block.
Bekommt man das so hin dass die Leerzeichen wie ganz normaler Text gehandhabt werden?
MFG kinglazee
Antwort 8 von manei
Hallo,
wenn Du das Anführungszeichen direkt ohne Leerzeichen hinter ~ setzt, sollte das eigentlich nicht passieren.
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
bzw.
hier habe ich mal delims=~ nach ganz hinten gesetzt.
for /f "tokens=1,2,3 skip=%x1% delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
Durch delims=~" werden normalerweiser die Standardtrennzeichen Leerzeichen und Tab ersetzt durch ~.
MfG maneich
wenn Du das Anführungszeichen direkt ohne Leerzeichen hinter ~ setzt, sollte das eigentlich nicht passieren.
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
bzw.
hier habe ich mal delims=~ nach ganz hinten gesetzt.
for /f "tokens=1,2,3 skip=%x1% delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
Durch delims=~" werden normalerweiser die Standardtrennzeichen Leerzeichen und Tab ersetzt durch ~.
MfG maneich
Antwort 9 von kinglazee
Zitat:
Durch delims=~" werden normalerweiser die Standardtrennzeichen Leerzeichen und Tab ersetzt durch ~.
Also ich glaube das ist genau das Problem, der ersetzt meine Leerzeichen durch ~. Dann sieht er es als getrennter Block an und die Pfadangabe ist nicht korrekt.
Gibt es das eine andere möglichkeit?
MFG kinglazee
Durch delims=~" werden normalerweiser die Standardtrennzeichen Leerzeichen und Tab ersetzt durch ~.
Also ich glaube das ist genau das Problem, der ersetzt meine Leerzeichen durch ~. Dann sieht er es als getrennter Block an und die Pfadangabe ist nicht korrekt.
Gibt es das eine andere möglichkeit?
MFG kinglazee
Antwort 10 von manei
Hallo,
in Deinem Fall sieht es so aus, als ob außer der Tilde ~ auch noch das Leerzeichen als Trennzeichen Gültigkeit hat. Das kannst du ja mal testen mit
for /f "tokens=1,2,3,4,5 delims=~" %%i in (test.txt) do echo %%i %%j %%k %%l %%m.
Das sollte nicht sein. Da muß ich mich erst mal etwas schlauer machen. Vielleicht fällt hier im Forum auch noch jemand anderem etwas dazu ein.
MfG maneich
in Deinem Fall sieht es so aus, als ob außer der Tilde ~ auch noch das Leerzeichen als Trennzeichen Gültigkeit hat. Das kannst du ja mal testen mit
for /f "tokens=1,2,3,4,5 delims=~" %%i in (test.txt) do echo %%i %%j %%k %%l %%m.
Das sollte nicht sein. Da muß ich mich erst mal etwas schlauer machen. Vielleicht fällt hier im Forum auch noch jemand anderem etwas dazu ein.
MfG maneich
Antwort 11 von kinglazee
ja, genauso wie du es Beschrieben hast ist mein Problem.
Das Leerzeichen wird def. als Trennzeichen gezählt. Das soll nicht so sein, die Variable mit der Pfadangabe sollte nachher den kompletten Pfad enthalten, ob mit oder ohne Leerzeichen.
Danke für die mühe...
MFG kinglazee
Das Leerzeichen wird def. als Trennzeichen gezählt. Das soll nicht so sein, die Variable mit der Pfadangabe sollte nachher den kompletten Pfad enthalten, ob mit oder ohne Leerzeichen.
Danke für die mühe...
MFG kinglazee
Antwort 12 von manei
Hallo,
eines verstehe ich nicht ganz.
Den gesamten Pfad hast Du doch immer in einer Zeile. Ohne den Einbau der Tilde sollte das doch dann so aussehen
c:\eigene Dateien\Sicherung Eigene Dateien\User1
c:\win95\Sicherung Systemfiles\User2
Wenn Du am Ende den gesamten Pfad haben willst, kannst du den doch Zeile für Zeile aus der textdatei auslesen mit
for /f %%i in (text.txt) do call :ablauf %%i
oder
for /f "skip=1" %%i in (text.txt) do call :ablauf %%i
oder Du kommentierst die Zeilen die nicht verarbeitet werden sollen mit enem Semikolon am Anfang aus z.B.
; c:\eigene Dateien\Sicherung Eigene Dateien\User1
c:\win95\Sicherung Systemfiles\User2
die Befehlszeile sieht dann so aus
for /f "eol=;" %%i in (text.txt) do call :ablauf %%i
hier werden dann nur die Zeilen ohne das Semikolon ausgelesen bzw. verarbeitet.
In :ablauf stehen die Daten/Pfad in %1 und können weiterverarbeitet werden.
Ich denke, das ist die einfachste Lösung.
zu dem Problem mit den Leerzeichen habe ich nichts gefunden. Vielleicht solltest Du Deine Zeile mit for... mal hier reinstellen, möglicherweise ist diese fehlerhaft.
Ach ja noch etwas die Variablen in der for-Zeile werden nur in batch/cmd-Dateien mit %% angegeben, testest Du das über die CMD.EXE direkt muß nur ein %-Zeichen angegeben werden.
MfG maneich
eines verstehe ich nicht ganz.
Den gesamten Pfad hast Du doch immer in einer Zeile. Ohne den Einbau der Tilde sollte das doch dann so aussehen
c:\eigene Dateien\Sicherung Eigene Dateien\User1
c:\win95\Sicherung Systemfiles\User2
Wenn Du am Ende den gesamten Pfad haben willst, kannst du den doch Zeile für Zeile aus der textdatei auslesen mit
for /f %%i in (text.txt) do call :ablauf %%i
oder
for /f "skip=1" %%i in (text.txt) do call :ablauf %%i
oder Du kommentierst die Zeilen die nicht verarbeitet werden sollen mit enem Semikolon am Anfang aus z.B.
; c:\eigene Dateien\Sicherung Eigene Dateien\User1
c:\win95\Sicherung Systemfiles\User2
die Befehlszeile sieht dann so aus
for /f "eol=;" %%i in (text.txt) do call :ablauf %%i
hier werden dann nur die Zeilen ohne das Semikolon ausgelesen bzw. verarbeitet.
In :ablauf stehen die Daten/Pfad in %1 und können weiterverarbeitet werden.
Ich denke, das ist die einfachste Lösung.
zu dem Problem mit den Leerzeichen habe ich nichts gefunden. Vielleicht solltest Du Deine Zeile mit for... mal hier reinstellen, möglicherweise ist diese fehlerhaft.
Ach ja noch etwas die Variablen in der for-Zeile werden nur in batch/cmd-Dateien mit %% angegeben, testest Du das über die CMD.EXE direkt muß nur ein %-Zeichen angegeben werden.
MfG maneich
Antwort 13 von kinglazee
manei:
Zitat (kinglazee):
Meine Textdatei sieht jetzt so aus:
c:\eigene Dateien\~Sicherung Eigene Dateien~User1
c:\win95~Sicherung Systemfiles~User2
/Zitat end
Die Tildes trennen einzelne Blöcke voneinander ab, in diesen Blöcken sind unter Umständen Leerzeichen dabei!
Am ende will ich 3 Variablen haben die die Werte der 3 Blöcke enthalten.
Bei dem ganzen Projekt geht es 1. um den Lerneffekt, 2. um ein gutes System für Backup's!
Gibt es sonstige Verständnisprobleme?
MFG kinglazee
Zitat (kinglazee):
Meine Textdatei sieht jetzt so aus:
c:\eigene Dateien\~Sicherung Eigene Dateien~User1
c:\win95~Sicherung Systemfiles~User2
/Zitat end
Die Tildes trennen einzelne Blöcke voneinander ab, in diesen Blöcken sind unter Umständen Leerzeichen dabei!
Am ende will ich 3 Variablen haben die die Werte der 3 Blöcke enthalten.
Bei dem ganzen Projekt geht es 1. um den Lerneffekt, 2. um ein gutes System für Backup's!
Gibt es sonstige Verständnisprobleme?
MFG kinglazee
Antwort 14 von manei
Hallo,
eigentlich war die Darstellung der for-Zeile gefragt.
Als letzte vorstellbare Möglichkeit bliebe nur noch, daß von den 2 Standardtrennzeichen durch die Tilde nur 1 Standardtrennzeichen - in Deinem Fall Tab - ersetzt wird.
Um dies zu testen, solltest Du mal noch ein zweites Zeichen einfügen, das niemals in deiner Textdatei vorkommen kann z.B. #. Deine for-Zeile sieht dann z.B. so aus:
for /f "tokens=1,2,3 skip=%x1% delims=~#" %%i in (test.txt) do call :ablauf %%i %%j %%k
MfG maneich
eigentlich war die Darstellung der for-Zeile gefragt.
Als letzte vorstellbare Möglichkeit bliebe nur noch, daß von den 2 Standardtrennzeichen durch die Tilde nur 1 Standardtrennzeichen - in Deinem Fall Tab - ersetzt wird.
Um dies zu testen, solltest Du mal noch ein zweites Zeichen einfügen, das niemals in deiner Textdatei vorkommen kann z.B. #. Deine for-Zeile sieht dann z.B. so aus:
for /f "tokens=1,2,3 skip=%x1% delims=~#" %%i in (test.txt) do call :ablauf %%i %%j %%k
MfG maneich
Antwort 15 von kinglazee
Das ist eine Gute idee...
Hier mal meine Batch:
@echo off
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
:ablauf
echo 1.Spalte: %1
echo 2.Spalte: %2
echo 3.Spalte: %3
und hier noch die Textzeile:
C:\Dokumente#und#Einstellungen\--pL4tOOn--\Eigene#Dateien~Sicherung~h:\sicherung\temp.bkf
------------
Jetzt müsste ich nur noch hinbekommen dass die Variablen %1 %2 %3 jeweils das '#'-Zeichen durch ein Leerzeichen ersetzen...
Wenn mir das noch jemand sagen kann bin ich mehr als zufrieden!
Danke im voraus...
MFG kinglazee
Hier mal meine Batch:
@echo off
for /f "tokens=1,2,3 delims=~" %%i in (test.txt) do call :ablauf %%i %%j %%k
goto :eof
:ablauf
echo 1.Spalte: %1
echo 2.Spalte: %2
echo 3.Spalte: %3
und hier noch die Textzeile:
C:\Dokumente#und#Einstellungen\--pL4tOOn--\Eigene#Dateien~Sicherung~h:\sicherung\temp.bkf
------------
Jetzt müsste ich nur noch hinbekommen dass die Variablen %1 %2 %3 jeweils das '#'-Zeichen durch ein Leerzeichen ersetzen...
Wenn mir das noch jemand sagen kann bin ich mehr als zufrieden!
Danke im voraus...
MFG kinglazee
Antwort 16 von manei
Hallo,
so war das eigentlich nicht gemeint.
In der Textdatei sollten die Leerzeichen schon bleiben, Du solltest nur bei delims=~# dieses Zeichen noch hinzufügen und testen ob damit auch die Leerzeichen als Trennzeichen weg sind.
Wenn das nicht hinhaut, kannst du dieses Zeichen auch ersetzen durch
echo %%1:#= % (Leerzeichen nach = und vor %)
evtl. akzeptiert er es bei %1 nicht dann
set x=%1
echo %x:#= %
Das kannst du dann auch in eine Variable setzen.
MfG maneich
so war das eigentlich nicht gemeint.
In der Textdatei sollten die Leerzeichen schon bleiben, Du solltest nur bei delims=~# dieses Zeichen noch hinzufügen und testen ob damit auch die Leerzeichen als Trennzeichen weg sind.
Wenn das nicht hinhaut, kannst du dieses Zeichen auch ersetzen durch
echo %%1:#= % (Leerzeichen nach = und vor %)
evtl. akzeptiert er es bei %1 nicht dann
set x=%1
echo %x:#= %
Das kannst du dann auch in eine Variable setzen.
MfG maneich
Antwort 17 von kinglazee
Super, funktioniert soweit sehr gut.
Das einzigste was ich noch bräuchte wäre folgendes:
In der Textdatei muss ich momentan dort wo normal ein Leerzeichen ist ein '#' Zeichen machen.
Würde gerne die Textdatei ohne # Zeichen schreiben und eine komplette Zeile einlesen und alle Leerzeichen durch # ersetzen...
MFG kinglazee
P.S. Sehr gutes Forum! Bekomme sehr schnell Hilfe und auch sehr Professionell!
DANKE!
Das einzigste was ich noch bräuchte wäre folgendes:
In der Textdatei muss ich momentan dort wo normal ein Leerzeichen ist ein '#' Zeichen machen.
Würde gerne die Textdatei ohne # Zeichen schreiben und eine komplette Zeile einlesen und alle Leerzeichen durch # ersetzen...
MFG kinglazee
P.S. Sehr gutes Forum! Bekomme sehr schnell Hilfe und auch sehr Professionell!
DANKE!
Antwort 18 von manei
Hallo,
for /f %%i in (test.txt) do call :ablauf %%i
:ablauf
set x=%%1: =#%
for /f "tokens=1,2,3 delims=~" %%i in ("%x%") do call :ablauf1 %%i %%j %%k
:ablauf1
echo %%1:#= %
echo %%2:#= %
echo %%3:#= %
MfG maneich
for /f %%i in (test.txt) do call :ablauf %%i
:ablauf
set x=%%1: =#%
for /f "tokens=1,2,3 delims=~" %%i in ("%x%") do call :ablauf1 %%i %%j %%k
:ablauf1
echo %%1:#= %
echo %%2:#= %
echo %%3:#= %
MfG maneich
Antwort 19 von kinglazee
hallo,
mit der Zeile:
for /f %%i in (test.txt) do call :ablauf %%i
funktioniert es nicht so richtig, er liefert mit zwar den anfang der Zeile, aber leider auch nur bis zum 1. Leerzeichen.
Ne Batch zum Testen:
@echo off
for /f %%i in (backup.txt) do call :ablauf %%i
:ablauf
set x=%1
echo Test: %x%
Gibt es keine Funktion mit der ich einfach die komplette Zeile in eine Variabl laden kann?
mfg kinglazee
mit der Zeile:
for /f %%i in (test.txt) do call :ablauf %%i
funktioniert es nicht so richtig, er liefert mit zwar den anfang der Zeile, aber leider auch nur bis zum 1. Leerzeichen.
Ne Batch zum Testen:
@echo off
for /f %%i in (backup.txt) do call :ablauf %%i
:ablauf
set x=%1
echo Test: %x%
Gibt es keine Funktion mit der ich einfach die komplette Zeile in eine Variabl laden kann?
mfg kinglazee
Antwort 20 von Massaraksch
Deine "Batch zum Testen" müßte so gehen:
@echo off
for /f "tokens=*" %%i in (backup.txt) do call :ablauf %%i
:ablauf
set x=%*
echo Test: %x%
Dann klappt's auch mit kompletten Zeilen.
Massaraksch
@echo off
for /f "tokens=*" %%i in (backup.txt) do call :ablauf %%i
:ablauf
set x=%*
echo Test: %x%
Dann klappt's auch mit kompletten Zeilen.
Massaraksch

