Rauten Automatisch entfernen
Hallo,
ich habe mal eine Frage ,
ich brüchte ein Script oder so das Automatisiert eine Datei "CMEDECHO.GDT" die in einem Ordner landet und folgenden Inhalt hat z.B.
01380006310
014810000139
01030001
0196228[#70]hallo
0186228Sonstiges
0096228
0096228
017620007102007
0198402[#70]hallo
011841070
Dann sollten alle Rauten (#)
entfernt werden.
und die Datei in einen anderen Ordner verschoben werden inkl. eine Sicherungkopie der Datei in einen Beliebigen Ordner.
Vielen Dank.
Gruß JMP
ich habe mal eine Frage ,
ich brüchte ein Script oder so das Automatisiert eine Datei "CMEDECHO.GDT" die in einem Ordner landet und folgenden Inhalt hat z.B.
01380006310
014810000139
01030001
0196228[#70]hallo
0186228Sonstiges
0096228
0096228
017620007102007
0198402[#70]hallo
011841070
Dann sollten alle Rauten (#)
entfernt werden.
und die Datei in einen anderen Ordner verschoben werden inkl. eine Sicherungkopie der Datei in einen Beliebigen Ordner.
Vielen Dank.
Gruß JMP
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 70334
Url: https://administrator.de/contentid/70334
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Alcom-Pavel!
Spontan würde mir als Lösung zu Deiner Fragestellung "sed" einfallen, aber per Batch lässt sich vielleicht auch etwas machen:
Die "set"-Zeilen am Anfang dienen dem Festlegen der Eingabedatei, des Ordners für die Sicherungskopie und des Dateinamens (samt Pfad) der bearbeiteten Datei. Für letztere wäre zu überlegen, was mit einer bereits vorhandenen gleichnamigen Datei im Zielordner geschehen soll - in der aktuellen Fassung wird diese vorweg gelöscht, um für die neue Datei "Platz zu machen".
Soferne Deine Datenzeilen alle im Format dem Beispiel entsprechen, sollte der Batch eigentlich funktionieren, wobei leere Zeilen oder nur aus Leerzeichen bestehenden Zeilen ebenfalls erhalten bleiben müssten. Probleme würde es geben, wenn eine Zeile eine ungerade Anzahl von Anführungszeichen enthalten sollte.
Grüße
bastla
Spontan würde mir als Lösung zu Deiner Fragestellung "sed" einfallen, aber per Batch lässt sich vielleicht auch etwas machen:
@echo off & setlocal
set "In=D:\CMEDECHO.GDT"
set "CpDir=D:\Kopien"
set "Out=D:\Verschobene\CMEDECHO.GDT"
if exist "%Out%" del "%Out%"
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%In%"') do set "Line=%%j" & call :ProcessLine "%%j"
move "%In%" "%CpDir%"
goto :eof
:ProcessLine
set "Line=%Line:#=%"
if %1=="" set Line=
(echo.%Line%)>>"%Out%"
Soferne Deine Datenzeilen alle im Format dem Beispiel entsprechen, sollte der Batch eigentlich funktionieren, wobei leere Zeilen oder nur aus Leerzeichen bestehenden Zeilen ebenfalls erhalten bleiben müssten. Probleme würde es geben, wenn eine Zeile eine ungerade Anzahl von Anführungszeichen enthalten sollte.
Grüße
bastla
Alternativ könntest du auch alle Rauten entfernen, indem die das File mit Notepad öffnest, dann Ctrl+H drückst und im dortigen Fenster alle Rauten durch nichts ersetzt, sprich das untere Feld einfach leer lässt. Sollte auch klappen, ich verstehe aber, dass es bei weitem bequemer ist, wenn man das mit einem geplanten Task machen kann.
Hallo Alcom-Pavel!
Ungetesteter Entwurf mit Endlosschleife und laufender Nummer (Format: "000001"):
Mit dem Wert nach "-n" in der "ping"-Zeile kannst Du die Länge der Pause nach jeder Datei festlegen (derzeit ca 30 Sekunden).
Grüße
bastla
Ungetesteter Entwurf mit Endlosschleife und laufender Nummer (Format: "000001"):
@echo off & setlocal
set "InDir=D:\Ein"
set "InName=CMEDECHO"
set "InTyp=GDT"
set "CpDir=D:\Kopien"
set "OutDir=D:\Verschobene"
set "OutName=NeuerName"
set "OutTyp=GDT"
set "Nr=1000001"
set "In=%InDir%\%InName%.%InTyp%"
:Schleife
set "Out=%OutDir%\%OutName%_%Nr:~-6%.%OutTyp%"
if exist "%Out%" del "%Out%"
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%In%"') do set "Line=%%j" & call :ProcessLine "%%j"
move "%In%" "%CpDir%\%InName%_%Nr:~-6%.%InTyp%"
set /a Nr+=1
:Warte
ping 127.0.0.1 -n 30 >nul
if not exist "%In%" goto :Warte
goto :Schleife
:ProcessLine
set "Line=%Line:#=%"
if %1=="" set Line=
(echo.%Line%)>>"%Out%"
Grüße
bastla