Mit Batch-Datei eine Datei lesen, Zeilen ändern und als neue Datei schreiben
Hallo
Ich versuche nun schon seit einiger Zeit das "kleine" Script (unter Windows 8) zum laufen zu bringen - erfolglos.
Mit und ohne Hochkommas (braucht es diese beim SET?), mit ! und %, etc. alles hat nichts gebracht.
Dabei ist es sicher einfach wenn man weiss wie
Ich habe eine Datei (IN-DATEI) die wie folgt aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"111"
GC4Q9TG,2014-09-12T11:51Z,Found it,"112"
etc. weiter Zeilen
Nun möchte ich damit eine Neue Datei erstellen, die so aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"222"
GC4Q9TG,2014-09-12T11:51Z,Found it,"333"
etc. weiter Zeilen
Da habe ich z.B. mit folgenden Batch versucht:
SET s1=111
SET e1=222
SET s2=112
SET e2=333
FOR /F "delims=" %%a IN (IN-DATEI) DO (
SET zeile=%%a
SET zeile="zeile:%s1%=%e1%"
SET zeile="zeile:%s2%=%e2%"
%zeile%>>OUT-DATEI.txt
)
ECHO UMSTELLUNG BEENDET
Wo liegt der Haken, dass es nichts in die OUT-Datei schreibt. Ich habe an einigen Orten ein ECHO eingebaut, in %zeile% scheint nie was zu sein.
Viele Dank für Eure Hilfe und Grüsse aus dem Süden, geosem
Ich versuche nun schon seit einiger Zeit das "kleine" Script (unter Windows 8) zum laufen zu bringen - erfolglos.
Mit und ohne Hochkommas (braucht es diese beim SET?), mit ! und %, etc. alles hat nichts gebracht.
Dabei ist es sicher einfach wenn man weiss wie
Ich habe eine Datei (IN-DATEI) die wie folgt aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"111"
GC4Q9TG,2014-09-12T11:51Z,Found it,"112"
etc. weiter Zeilen
Nun möchte ich damit eine Neue Datei erstellen, die so aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"222"
GC4Q9TG,2014-09-12T11:51Z,Found it,"333"
etc. weiter Zeilen
Da habe ich z.B. mit folgenden Batch versucht:
SET s1=111
SET e1=222
SET s2=112
SET e2=333
FOR /F "delims=" %%a IN (IN-DATEI) DO (
SET zeile=%%a
SET zeile="zeile:%s1%=%e1%"
SET zeile="zeile:%s2%=%e2%"
%zeile%>>OUT-DATEI.txt
)
ECHO UMSTELLUNG BEENDET
Wo liegt der Haken, dass es nichts in die OUT-Datei schreibt. Ich habe an einigen Orten ein ECHO eingebaut, in %zeile% scheint nie was zu sein.
Viele Dank für Eure Hilfe und Grüsse aus dem Süden, geosem
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 250806
Url: https://administrator.de/forum/mit-batch-datei-eine-datei-lesen-zeilen-aendern-und-als-neue-datei-schreiben-250806.html
Ausgedruckt am: 15.04.2025 um 12:04 Uhr
20 Kommentare
Neuester Kommentar
Hallo GeoSem und willkommen im Forum!
Mit ein paar kleinen Anpassungen (Stichwort "
Die Anführungszeichen bei den
Grüße
bastla
P.S.: Wie Du Code hier im Forum formatieren kannst, steht hier ...
Mit ein paar kleinen Anpassungen (Stichwort "
delayedExpansion
") sollte Dein Ansatz funktionieren:1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off & setlocal enabledelayedexpansion
SET "s1=111"
SET "e1=222"
SET "s2=112"
SET "e2=333"
FOR /F "delims=" %%a IN (IN-DATEI) DO (
SET "zeile=%%a"
SET "zeile=!zeile:%s1%=%e1%!"
SET "zeile=!zeile:%s2%=%e2%!"
echo !zeile!>>OUT-DATEI.txt
)
ECHO UMSTELLUNG BEENDET
SET
-Anweisungen sind nicht unbedingt nötig, sorgen aber für eine eindeutige Textabgrenzung (sodass zB ein zusätzliches Leerzeichen nach "111" nicht mit in die Variable %s1% übernommen wird) ...Grüße
bastla
P.S.: Wie Du Code hier im Forum formatieren kannst, steht hier ...
Hallo GeoSem!
Das "
hinzufügst oder den Batch aus einem CMD-Fenster startest.
Heißt Deine Ausgangsdatei tatsächlich "IN-DATEI" ohne ".txt" dahinter, und liegt sie im gleichen Ordner wie die Batch-Datei? Im Zweifelsfall kannst Du die Zeile 8 auf
abändern und den kompletten Dateipfad zwischen den Anführungszeichen angeben ...
Grüße
bastla
Das "
echo off
" mit oder ohne "@" hat keine Auswierkung auf die Ausgabe in die Datei - allerdings kannst Du den Ablauf ohne "echo off
" (oder stattdessen mit "echo on
") besser nachvollziehen - vor allem, wenn Du am Ende noch eine Zeilepause
Heißt Deine Ausgangsdatei tatsächlich "IN-DATEI" ohne ".txt" dahinter, und liegt sie im gleichen Ordner wie die Batch-Datei? Im Zweifelsfall kannst Du die Zeile 8 auf
FOR /F "usebackq delims=" %%a IN ("D:\Dein Ordner\IN-DATEI") DO (
Grüße
bastla
Hallo GeoSem!
Mit Deinen Testdaten und "
Danach sieht der Inhalt der "OUT-Datei.txt" so aus:
Vergleiche das mit Deinem Ablauf ...
Grüße
bastla
Mit Deinen Testdaten und "
echo on
" in Zeile 1 sieht das bei mir in der CMD-Shell so aus:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
D:>Ersetzen.cmd
D:>SET "s1=111"
D:>SET "e1=222"
D:>SET "s2=112"
D:>SET "e2=333"
D:>FOR /F "delims=" %a IN (IN-DATEI) DO (
SET "zeile=%a"
SET "zeile=!zeile:111=222!"
SET "zeile=!zeile:112=333!"
echo !zeile! 1>>OUT-DATEI.txt
)
D:>(
SET "zeile=GC5CM98,2014-09-27T17:23Z,Found it,"111""
SET "zeile=!zeile:111=222!"
SET "zeile=!zeile:112=333!"
echo !zeile! 1>>OUT-DATEI.txt
)
D:>(
SET "zeile=GC4Q9TG,2014-09-12T11:51Z,Found it,"112""
SET "zeile=!zeile:111=222!"
SET "zeile=!zeile:112=333!"
echo !zeile! 1>>OUT-DATEI.txt
)
D:>ECHO UMSTELLUNG BEENDET
UMSTELLUNG BEENDET
1
2
2
GC5CM98,2014-09-27T17:23Z,Found it,"222"
GC4Q9TG,2014-09-12T11:51Z,Found it,"333"
Grüße
bastla
Kein Problem.
Eine UNICODE Ausgabedatei bekommst du übrigens etwa so:
Grüße
rubberman
Eine UNICODE Ausgabedatei bekommst du übrigens etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off &setlocal
SET "s1=111"
SET "e1=222"
SET "s2=112"
SET "e2=333"
FOR /F "TOKENS=2 DELIMS=:" %%i IN ('CHCP') DO SET /A oemcp=%%~ni
>NUL CHCP 1252
<NUL >"OUT-DATEI.txt" SET /P "=ÿþ"
FOR /F "delims=" %%a IN ('TYPE "geocache_visits.txt"') DO (
SET "zeile=%%a"
SETLOCAL EnableDelayedExpansion
SET "zeile=!zeile:%s1%=%e1%!"
SET "zeile=!zeile:%s2%=%e2%!"
CMD /U /V:ON /C ">>"OUT-DATEI.txt" ECHO !zeile!"
ENDLOCAL
)
>NUL CHCP %oemcp%
ECHO UMSTELLUNG BEENDET
PAUSE
rubberman
Huch 
Mehrzeilige Ersetzungen mit allen möglichen Sonderzeichen in einer Unicode Datei? Hättest du das mal von Anfang an geschrieben, hätten wir uns die Arbeit ersparen können so etwas in Batch umsetzen zu wollen. An der Stelle ist leider Ende mit Batch und wie das mit einer anderen Sprache umsetzbar wäre kommt darauf an wie deine Originaldatei tatsächlich aussieht (z.B. welche Art von Zeilenumbruch vorliegt etc.).
Grüße
rubberman
EDIT: Ah, also doch nicht mehrzeilig?
Nee, lass das mal in einer Zeile. Alles andere wird noch komplizierter.
Mehrzeilige Ersetzungen mit allen möglichen Sonderzeichen in einer Unicode Datei? Hättest du das mal von Anfang an geschrieben, hätten wir uns die Arbeit ersparen können so etwas in Batch umsetzen zu wollen. An der Stelle ist leider Ende mit Batch und wie das mit einer anderen Sprache umsetzbar wäre kommt darauf an wie deine Originaldatei tatsächlich aussieht (z.B. welche Art von Zeilenumbruch vorliegt etc.).
Grüße
rubberman
EDIT: Ah, also doch nicht mehrzeilig?
Nee, lass das mal in einer Zeile. Alles andere wird noch komplizierter.