Per Batch Zeichenfolgen suchen und mit nachfolgende Zeichen in neue Datei kopieren
Hallo! Die Fragestellung entspricht zwar einigen bereits gestellten hier im Forum. Leider komme ich nach mehreren Stunden recherchieren und probieren nicht so recht klar. Für Euch Experten ist das sicher kein Problem.
Ich habe mehrere Dateien "Ein?.dat" in einem Verzeichnis. Dort liegt auch die zu erstellende "vis.bat". Diese soll alle "Ein?.dat" nach einer Zeichenkette "visval" durchsuchen. Die Zeichenkette und die folgenden 11 Zeichen sollen fortlaufend in ein eine einzige neue Datei "Aus.dat" kopiert werden. Vielen Dank schon mal!
Ein1.dat
Ein2.dat
Ein3.dat
...
Ein1.dat ... Ein?.dat sieht immer so aus:
Aus.dat sollte dann so aussehen:
Ich habe mehrere Dateien "Ein?.dat" in einem Verzeichnis. Dort liegt auch die zu erstellende "vis.bat". Diese soll alle "Ein?.dat" nach einer Zeichenkette "visval" durchsuchen. Die Zeichenkette und die folgenden 11 Zeichen sollen fortlaufend in ein eine einzige neue Datei "Aus.dat" kopiert werden. Vielen Dank schon mal!
Ein1.dat
Ein2.dat
Ein3.dat
...
Ein1.dat ... Ein?.dat sieht immer so aus:
// Datafile written by Mathcad
// 08/10/11 13:57:18
.MATRIX 0 0 24 3
"visval,10000,58.1228600192828" 0 0
"visval,10001,55.8719565435609" 0 0
"visval,10002,45.8351180157297" 0 0
"visval,10003,58.5046416119181" 0 0
"visval,10004,57.6494541912281" 0 0
"visval,10005,45.7315176626331" 0 0
"visval,10006,37.2643068652701" 0 0
"visval,10007,26.1210065954005" 0 0
"visval,10008,22.7099962321111" 0 0
"visval,10009,25.0559360319937" 0 0
"visval,10010,35.9036309867422" 0 0
"visval,10011,31.333264310119" 0 0
"visval,10012,89.2226372546821" 0 0
"visval,10013,85.4817205754242" 0 0
"visval,10014,81.3341356276671" 0 0
"visval,10015,86.6759720331076" 0 0
"visval,10016,82.8176312808791" 0 0
"visval,10017,78.5943078843083" 0 0
"visval,10018,52.3241633904348" 0 0
"visval,10019,53.1341030066508" 0 0
"visval,10020,53.1207010124104" 0 0
"visval,10021,50.3795769037556" 0 0
"visval,10022,55.0316549690835" 0 0
"visval,10023,58.3320021304807" 0 0
Aus.dat sollte dann so aussehen:
visval,10000,58.1
visval,10001,55.8
visval,10002,45.8
visval,10003,58.5
visval,10004,57.6
visval,10005,45.7
...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 171322
Url: https://administrator.de/forum/per-batch-zeichenfolgen-suchen-und-mit-nachfolgende-zeichen-in-neue-datei-kopieren-171322.html
Ausgedruckt am: 19.05.2025 um 06:05 Uhr
11 Kommentare
Neuester Kommentar
@Skyemugen
Grüße
bastla
55.87 wird wirklich zu 55.8 und nicht zu 55.9?
Wegendie folgenden 11 Zeichen ...
Überlegungen zur Sinnhaftigkeit soll der TE anstellen ...Grüße
bastla
Aloha Robert,
nun dein Beispiel hat, wie bastla bereits gemerkt hat, keine 11 Zeichen ...
aber egal, arbeiten wir erst einmal mit einer Stelle nach dem Punkt und max. zweistelligen Nummerierungen
Achso, momentan werden
greetz André
edit: jetzt mitDEP für Ein- bis N-stelligen Dezimalzahlen
edit²: jetzt einer für alle und ganz korrekt mit gerader Anzahl Zollzeichen
aber egal, arbeiten wir erst einmal mit einer Stelle nach dem Punkt und max. zweistelligen Nummerierungen
@echo off & setlocal
set "Pfad=E:\Skripte"
pushd "%Pfad%"
set "Output=Aus.dat"
if exist "%Output%" del "%Output%"
for /f "delims=" %%s in ('dir /b "Ein??.dat"') do (
for /f "tokens=2-4 delims=,. " %%m in ('findstr "visval" "%%s"') do call :Ablauf %%m %%n "%%o
)
popd
pause
exit /b
:Ablauf
set "Zahl=%~3"
set "Zahl=%Zahl:~0,1%"
>>"%Output%" echo visval,%1,%2.%Zahl%
goto :eof
Aus?.dat
equivalent zur Ein?.dat
erstellt, da mir unklar ist, ob du alle in eine haben willst oder für jede eine einzelne Datei.greetz André
edit: jetzt mit
del !Output!
und für edit²: jetzt einer für alle und ganz korrekt mit gerader Anzahl Zollzeichen
@Skyemugen
Da Du (zu Recht) gerne mal eine gerade Anzahl von "Zollzeichen" urgierst, wäre eigentlich
und entsprechend
exakter ...
Grüße
bastla
nun dein Beispiel hat, wie bastla bereits gemerkt hat, keine 11 Zeichen ...
Mitnichten - nach "visval" folgen mit ",10000,58.1" tatsächlich 11 Zeichen.Da Du (zu Recht) gerne mal eine gerade Anzahl von "Zollzeichen" urgierst, wäre eigentlich
for /f "tokens=2-4 delims=,. " %%m in ('findstr "visval" "%%s"') do call :Ablauf %%m %%n "%%o
set "Zahl=%~3"
Grüße
bastla
Aloha bastla,
stimmt, das erste Komma hatte ich lustigerweise ignoriert delims im Kopf ;D zum Anderen: Joa, genau genommen kam mir das auch in den Sinn, ich fand es aber erst unschön aber man sollte schon strikt bei seinen Prinzipien bleiben, also ist es wieder drin
greetz André
P.S.: Aber dieser drollige bug, dass
Aber lässt sich hier vorteilhaft nutzen.
stimmt, das erste Komma hatte ich lustigerweise ignoriert delims im Kopf ;D zum Anderen: Joa, genau genommen kam mir das auch in den Sinn, ich fand es aber erst unschön aber man sollte schon strikt bei seinen Prinzipien bleiben, also ist es wieder drin
greetz André
P.S.: Aber dieser drollige bug, dass
Ein??.dat
equ Ein1.dat
sein kann, ist immer wieder kurios
@Skyemugen
-Die Zeilen 5 und 6 wären vor der Zeile 4 besser aufgehoben ... [Edit] Ich habe schon wieder die 5 "Editierminuten" nicht berücksichtigt.
[/Edit]
Wieso "bug" - ist doch sicher ein "feature" ...
Grüße
bastla
Wieso "bug" - ist doch sicher ein "feature" ...
Grüße
bastla
Aloha bastla,
:P too late, war längst geschehen
kommt davon, wenn man mal so, dann so, dann DEP, dann doch alles in einem, da ändert man und lässt es erst einmal da stehen, wo es war ^_^
greetz André
edit: so kann das gehen *fg* war aber knapp
P.S.: Klar, bei M$ ist alles Seltsame immer ein feature, darum ist es ja so kostengünstig
P.P.S: @bastla, hattest du gemerkt: auch hier kam anfangs erst wieder
:P too late, war längst geschehen
greetz André
edit: so kann das gehen *fg* war aber knapp
P.S.: Klar, bei M$ ist alles Seltsame immer ein feature, darum ist es ja so kostengünstig
P.P.S: @bastla, hattest du gemerkt: auch hier kam anfangs erst wieder
call set
zum Einsatz *gg*