Per Batch Textfragmente in Gänsefüßchen Stellen
Hallo miteinander,
dieses Forum ist ja echt Gold wert. Vielleicht könnte mir jemand hier weiterhelfen.
Ich habe in Textdateien Fragmente folgenden Formats stehen
Schnipp
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
Schnapp
und der soll geändert werden in
Schnipp
anderererText
Sortierung.Fix1="zuersetzenderText"
Sortierung.Fix2="zuersetzenderText"
Sortierung.Default1="zuersetzenderText"
Sortierung.Default2="zuersetzenderText"
Sortierung.Default3="zuersetzenderText"
anderererText
Schnapp
also jeweils nur die Gänsefüßchen hinzufügt werden.
Gibt es eine Möglichkeit, das über Batch zu realisieren?
Die Zahlen hinter Fix und Default können auch variieren, sind also aufsteigend und können pro Textdatei unterschiedlich ein in der Anzahl (also mal 1-3 und mal 1-9 usw.)
Man müsste also etwa so suchen
Suche Sortierung.*=Textbiszeilenende ersezte Textbiszeilenende mit "Textbiszeilenende"
Sowas geht doch sicherlich nur über RegExpressions. Gibt es eventuell ein Fremdprogramm, dass sowas kann.
Für Hilfe wäre ich echt verbunden.
Vielen Dank
Marcel
dieses Forum ist ja echt Gold wert. Vielleicht könnte mir jemand hier weiterhelfen.
Ich habe in Textdateien Fragmente folgenden Formats stehen
Schnipp
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
Schnapp
und der soll geändert werden in
Schnipp
anderererText
Sortierung.Fix1="zuersetzenderText"
Sortierung.Fix2="zuersetzenderText"
Sortierung.Default1="zuersetzenderText"
Sortierung.Default2="zuersetzenderText"
Sortierung.Default3="zuersetzenderText"
anderererText
Schnapp
also jeweils nur die Gänsefüßchen hinzufügt werden.
Gibt es eine Möglichkeit, das über Batch zu realisieren?
Die Zahlen hinter Fix und Default können auch variieren, sind also aufsteigend und können pro Textdatei unterschiedlich ein in der Anzahl (also mal 1-3 und mal 1-9 usw.)
Man müsste also etwa so suchen
Suche Sortierung.*=Textbiszeilenende ersezte Textbiszeilenende mit "Textbiszeilenende"
Sowas geht doch sicherlich nur über RegExpressions. Gibt es eventuell ein Fremdprogramm, dass sowas kann.
Für Hilfe wäre ich echt verbunden.
Vielen Dank
Marcel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 59838
Url: https://administrator.de/contentid/59838
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
27 Kommentare
Neuester Kommentar
Hi Marcel,
mit regex ersetzen ... ginge mit einer sed-Protierung für Windows.
Mit Batch kannst du dein Textfile (Variable IN) zeilenweise lesen und dann die Zeile auseinandernehmen. Der Text vor dem = wird ausgegeben, dann das = selbst und dahinter der Text nach dem Gleichheitszeichen in Anführungszeichen.
Das Ganze ist vielleicht optimierungsbedürftig - aber so geht es und ist noch lesbar.
Viele Grüsse
-= Axel =-
mit regex ersetzen ... ginge mit einer sed-Protierung für Windows.
Mit Batch kannst du dein Textfile (Variable IN) zeilenweise lesen und dann die Zeile auseinandernehmen. Der Text vor dem = wird ausgegeben, dann das = selbst und dahinter der Text nach dem Gleichheitszeichen in Anführungszeichen.
Das Ganze ist vielleicht optimierungsbedürftig - aber so geht es und ist noch lesbar.
@echo off
set in=textfile.txt
set out=textfile_out.txt
del %out% 2>nul
for /F "tokens=*" %%a in ('type %in%') do call :replace "%%a"
type %out%
pause && exit
:replace
echo %1 | findstr "=" >nul || goto echoonly
for /F "tokens=1-2 delims==" %%c in (%1) do echo %%c="%%d" >>%out%
goto end
:echoonly
echo %~1 >>%out%
goto end
:end
Viele Grüsse
-= Axel =-
Hab gerade die von mir gepostete (vorher ungetestete) batch getestet.
Da da allerdings alles verändert wird konnte ich bei mir nicht feststellen.
meine Datei"dateiohne.txt" sieht so aus:
Und die erzeugte Datei "dateimit.txt" sieht dann so aus:
Ich kann also deinen Beschriebenen Effekt nicht nachvollziehen. Poste doch mal wie bei dir das Ergebnis aussieht (auszugsweise)?
Um mehrere Dateien zu verarbeiten kansnt du meine Batch folgendermasen umbauen:
So wird erstmal nur von jeder Datei eine Kopie angelegt mit der Erweiterung "_neu". Wenn dann alles läuft wie es soll kannst du dann die Dateien auch gleich wie die alten Dateien umbenennen lassen indem du vor der letzten ) noch folgende Zeilen einfügst:
miniversum
@echo off
for /F "tokens=1-3 delims=.=" %%a in ('type "dateiohne.txt"') do (
if "%%a" equ "Sortierung" (
echo %%a.%%b="%%c">>dateimit.txt
) else (
echo %%a%%b%%c>>dateimit.txt
)
)
Da da allerdings alles verändert wird konnte ich bei mir nicht feststellen.
meine Datei"dateiohne.txt" sieht so aus:
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
anderererText
Sortierung.Fix1="zuersetzenderText"
Sortierung.Fix2="zuersetzenderText"
Sortierung.Default1="zuersetzenderText"
Sortierung.Default2="zuersetzenderText"
Sortierung.Default3="zuersetzenderText"
anderererText
Ich kann also deinen Beschriebenen Effekt nicht nachvollziehen. Poste doch mal wie bei dir das Ergebnis aussieht (auszugsweise)?
Um mehrere Dateien zu verarbeiten kansnt du meine Batch folgendermasen umbauen:
@echo off
set "verzeichnis=C:\dateien\"
for /F "delims=" %%f in ('dir /b /a-D "%verzeichnis%"') do (
for /F "tokens=1-3 delims=.=" %%a in ('type "%verzeichnis%%%f"') do (
if "%%a" equ "Sortierung" (
echo %%a.%%b="%%c">>"%verzeichnis%%%~nf_neu%%~xf"
) else (
echo %%a%%b%%c>>"%verzeichnis%%%~nf_neu%%~xf"
)
)
)
So wird erstmal nur von jeder Datei eine Kopie angelegt mit der Erweiterung "_neu". Wenn dann alles läuft wie es soll kannst du dann die Dateien auch gleich wie die alten Dateien umbenennen lassen indem du vor der letzten ) noch folgende Zeilen einfügst:
del "%verzeichnis%%%f"
rename "%verzeichnis%%%~nf_neu%%~xf" "%verzeichnis%%%f"
rename "%verzeichnis%%%~nf_neu%%~xf" "%verzeichnis%%%f"
miniversum
Nach deiner Nachricht bin ich auf folgende Batch gekommen die das tun sollte was du haben möchstest (erstmal nur für eine Datei):
Willst du das ganze für mehrere Dateien haben (die alle im Verzeichnis C:\quelldateien\ ) liegen und die Endung .lst haben dann kannt du das so machen:
Ich hoffe das hilft dir?
miniversum
@echo off & setlocal enabledelayedexpansion
for /F "delims=" %%l in ('type "a.lst"') do (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>a_neu.lst
) else (
echo %%l>>a_neu.lst
)
)
Willst du das ganze für mehrere Dateien haben (die alle im Verzeichnis C:\quelldateien\ ) liegen und die Endung .lst haben dann kannt du das so machen:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
set "zielverzeichnis=C:\Bearbeitete Dateien"
for /F "delims=" %%f in ('dir /b /a-D "%quellverzeichnis%\*.lst"') do (
for /F "delims=" %%l in ('type "%quellverzeichnis%\%%f"') do (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"%zielverzeichnis%\%%f"
) else (
echo %%l>>"%zielverzeichnis%\%%f"
)
)
Ich hoffe das hilft dir?
miniversum
Also ohne zu testen würd ichs dan entsprechend so umbauen:
So sollten neue Dateien erzeugt werden (Dateiname_neu.lst) die im gleichen Verzeichniss sind wie die orginaldateien. Das mit dem Dir /s ist ja auch drin. Das in quellverzeichnis angegebene Verzeichniss dient als stammverzeichniss von dem aus dieses und alle Unterverzeichnisse durchsucht werden.
Das mit dem ersetzen mit move habe ich erstmal auskommentiert. Wenn es so funktioniert kannst du ja das REM in der vorletzten Zeile rausnehmen.
miniversum
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%nxf"
set "outfilename=%%nf_neu%%xf"
set "filedir=%%dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
So sollten neue Dateien erzeugt werden (Dateiname_neu.lst) die im gleichen Verzeichniss sind wie die orginaldateien. Das mit dem Dir /s ist ja auch drin. Das in quellverzeichnis angegebene Verzeichniss dient als stammverzeichniss von dem aus dieses und alle Unterverzeichnisse durchsucht werden.
Das mit dem ersetzen mit move habe ich erstmal auskommentiert. Wenn es so funktioniert kannst du ja das REM in der vorletzten Zeile rausnehmen.
miniversum
ok jetzt auch die getestete Version die bei mir Funktioniert.
So werden erstmal nur die neuen Dateien erstellt.
Wird das REM in der Vorletzten zeile entfernt werden die alten Dateien gleich ersetzt.
Jetzt könnte es nurnoch Probleme mit ! innerhalb der Dateien geben???
miniversum
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
Wird das REM in der Vorletzten zeile entfernt werden die alten Dateien gleich ersetzt.
Jetzt könnte es nurnoch Probleme mit ! innerhalb der Dateien geben???
miniversum
Sorry. Da das Forum heute morgen nicht ging antworte ich erst jetzt.
zu 2.:
Versuchs mal so:
Beim fettgedruckten mußt du mal schauen ob die Anzahl der Leerzeichen stimmt. Ich habe leider die Datei von dir gelöscht. Aber schau sie dir einfach mit einem Editor an und schau wieviele Leezeichen du dort davor hast. Soltest du Leerzeichen hinzufügen oder löschen must du auch beim, in der gleichen Zeile stehende, !line:~0,9! die 9 an die Anzahl der Zeichen dann anpassen.
zu 1.:
Das geht im Batch schlecht. In vbs würde sowas besser gehen wenn es Umbedingt erforderlich ist. In vbs kenne ich mich leider nicht aus. Da müßte dich Bastla woll einklinken dann.
miniversum
zu 2.:
Versuchs mal so:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
if "!line:~0,9!" equ <b>" Sonder"</b> (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
zu 1.:
Das geht im Batch schlecht. In vbs würde sowas besser gehen wenn es Umbedingt erforderlich ist. In vbs kenne ich mich leider nicht aus. Da müßte dich Bastla woll einklinken dann.
miniversum
Moin Nuker5 und miniversum,
bis bastla kommt, versuchts mal hiermit:
Die Geschichte mit den "<" und ">" -Zeichen habe ich nicht als Anforderung gesehen.
Falls da XML-(ähnliche)-Tags in den Quelldateien sind, dann kann das mit rein (siehe miniversums Schnipsel).
Sonst bitte ich mal um eine "typische" Inputdatei, damit wir alle gegen die gleiche Anforderung vor uns hin coden...
Grüße
Biber
Grüße
Biber
bis bastla kommt, versuchts mal hiermit:
::----------snipp DoGoosefeet.bat
@echo off & setlocal
:: ...!!!! hier anpassen %quellverzeichnis% und die Extension .lst
set "quellverzeichnis=C:\Unbearbeitete Dateien"
set "quellverzeichnis=E:\Administrator"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do Call :ProcessAFile "%%f"
Goto :eof
~~~~~~~
:ProcessAFile Param1=FQ-Dateiname
Set "out=%~dpn1.tmp"
echo.>%out%
echo ~~~~~~~~~ Datei "%~1" wird verarbeitet.
for /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do call :ProcessALine "%%i" "%%j"
echo [hier könnte ausgeführt werden] move /y "%out%" "%~1"
goto :eof
~~~~~~
:ProcessALine Parameter1=Zeilennr Parameter2=Inhalt der Zeile
If "%~2" == "" ((echo.>>%out%) & goto :eof)
echo %~2|(findstr /i "^Sortierung" >nul) || ((echo %~2>>%Out%) & goto :eof)
echo %~2|findstr "="|findstr """" >nul && (echo %~2>>%Out%) && goto :eof
echo %~2|findstr "=" >nul && For /f "delims== tokens=1,*" %%i in ("%~2") do (echo %%i="%%j">>%Out%) && goto :eof
Echo ??? [%~2]
goto :eof
Die Geschichte mit den "<" und ">" -Zeichen habe ich nicht als Anforderung gesehen.
Falls da XML-(ähnliche)-Tags in den Quelldateien sind, dann kann das mit rein (siehe miniversums Schnipsel).
Sonst bitte ich mal um eine "typische" Inputdatei, damit wir alle gegen die gleiche Anforderung vor uns hin coden...
Grüße
Biber
Grüße
Biber
Dein Code könnte passen. Die < und > must du Berücksichtigen. das problem hattte ich zu beginn auch.
Die datei hat nen Aufbau alla:
Die Einrückungen sind tabs.
Das findstr hab ich absichtlich weggelassen weils erstens länger dauert (Die Datei hat viele Zeilen) und zweitens ich ausschliesen Wollte das hinter dem Gleichheitszichen nicht auch eine solche Zeichenkette vorkommen kann.
miniversum
PS: An den Ansatz mit dem Findstr zum erzeugen einer Datei und auslesen des Teils nach dem : hab ich nicht dran gedacht.
Die datei hat nen Aufbau alla:
[blablabla]
bliblibli
blöblöblö=blublublub
Sicherung.Fix1=irgentwas
blumblumblum=bla <2>
bliblibli
blöblöblö=blublublub
Sicherung.Fix1=irgentwas
blumblumblum=bla <2>
Die Einrückungen sind tabs.
Das findstr hab ich absichtlich weggelassen weils erstens länger dauert (Die Datei hat viele Zeilen) und zweitens ich ausschliesen Wollte das hinter dem Gleichheitszichen nicht auch eine solche Zeichenkette vorkommen kann.
miniversum
PS: An den Ansatz mit dem Findstr zum erzeugen einer Datei und auslesen des Teils nach dem : hab ich nicht dran gedacht.
So hier jetzt mein Vorschlag mit der Verarbeitung von Leerzeilen nach Bibers Ansatz:
miniversum
PS: Sollte laufen solange keine ! enthalten sind.
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (
if "%%l" equ "" (
echo.>>"!filedir!!outfilename!"
) else (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
if "!line:~0,9!" equ " Sonder" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
miniversum
PS: Sollte laufen solange keine ! enthalten sind.
Ok her jetzt mit etwas mehr Zeit.
Also dies hier sollte alles mit Leerzeilen und auch enthaltene ! verarbeiten.
miniversum
Also dies hier sollte alles mit Leerzeilen und auch enthaltene ! verarbeiten.
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do call ProzFile "%%~dpnxf" "%%~dpnf_neu%%~xf"
goto:eof
:ProzFile
echo Datei "%~1" wird verarbeitet.
for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "%~1"') do call ProzLine "%%l" "%~2"
REM move /y "%~2" "%~1"
goto:eof
:ProzLine
if %1 equ "" (
echo.>>"%~2"
) else (
set line=%1
set line=%line:1,-1%
set line=%line:^>=^^^>%
set line=%line:^<=^^^<%
if "%line:~0,13%" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2"
) else (
if "%line:~0,9%" equ " Sonder" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2"
) else (
echo %line%>>"%~2"
)
)
)
goto:eof
miniversum
Also habs grade nochmal ausprobiert (weil ich die andern ja ohne zu testen geschrieben hab).
Mein erstes sollte gehen:
Das läuft bei mir Fehlerfrei durch.
Am andern Arbeit ich noch.
miniversum
Mein erstes sollte gehen:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (
if "%%l" equ "" (
echo.>>"!filedir!!outfilename!"
) else (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
if "!line:~0,9!" equ " Sonder" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
Am andern Arbeit ich noch.
miniversum
So Problem gefunden.
Der Ansatz mit den calls gehen nicht.
Der Grund liegt darin darin, dass in der Datei mehrere Zeilen vorkommen die folgende Zeichenfolge beinhalten:
Nimm einfach die Batch die ich im vorigen Posting habe. Die läuft bei mir durch ohne Probleme.
miniversum
Der Ansatz mit den calls gehen nicht.
Der Grund liegt darin darin, dass in der Datei mehrere Zeilen vorkommen die folgende Zeichenfolge beinhalten:
W + " " +A
Dies macht beim Aufruf Probleme weil dascall ProzLine "%%l" "%~2"
nicht mehr aus zwei sondern aus drei parametern dan besteht.Nimm einfach die Batch die ich im vorigen Posting habe. Die läuft bei mir durch ohne Probleme.
miniversum
Nein diese hier:
Es werden auch Leerzeilen berücksichtigt.
miniversum
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (
if "%%l" equ "" (
echo.>>"!filedir!!outfilename!"
) else (
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ " Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
if "!line:~0,9!" equ " Sonder" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
Es werden auch Leerzeilen berücksichtigt.
miniversum
Hab sie gerade nochmal überarbeitet.
Schau mal obs so funktioniert wie soll:
Achte auf die Zeile in der Mitte:
Hab die mit der Datei von der ausprobiert und lief.
miniversum
Schau mal obs so funktioniert wie soll:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (
set "infilename=%%~nxf"
set "outfilename=%%~nf_neu%%~xf"
set "filedir=%%~dpf"
echo Datei "!filedir!!infilename!" wird verarbeitet.
for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (
set "line=%%l"
if "!line!" equ "" (
echo.>>"!filedir!!outfilename!"
) else (
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
set cline=!line: =!
set cline=!cline: =! & REM hier ein Tabulator, keine Leerzeichen!
if /i "!cline:~0,10!" equ "Sortierung" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
if /i "!cline:~0,6!" equ "Sonder" (
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"
) else (
echo %%l>>"!filedir!!outfilename!"
)
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"
)
set cline=!cline: =! & REM hier ein Tabulator, keine Leerzeichen!
Dort mußt zwischen dem : und dem = einen Tabulator sein. Nicht das es durchs copy und Paste verlohren geht....Hab die mit der Datei von der ausprobiert und lief.
miniversum