alcom-pavel
Goto Top

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

Content-Key: 70334

Url: https://administrator.de/contentid/70334

Printed on: April 19, 2024 at 16:04 o'clock

Member: bastla
bastla Oct 07, 2007 at 20:53:49 (UTC)
Goto Top
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:
@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%"  
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
Member: TuXHunt3R
TuXHunt3R Oct 07, 2007 at 21:07:28 (UTC)
Goto Top
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.
Member: Alcom-Pavel
Alcom-Pavel Oct 07, 2007 at 23:27:25 (UTC)
Goto Top
Hallo bastla ,


funktioniert super! wenn du mir jetzt noch sagen könntest wie ich das als Schleife laufen lassen kann, und die Sicherungkopie Nummern bekommt denn solche Datein kommen sekündlich ca. 80 mal am tag in diesen Ordner.
Vielen vielen Dank.

Gruß JMP
Member: bastla
bastla Oct 08, 2007 at 05:05:54 (UTC)
Goto Top
Hallo Alcom-Pavel!

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%"  
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
Member: Alcom-Pavel
Alcom-Pavel Oct 08, 2007 at 05:52:21 (UTC)
Goto Top
Hallo bastler,

hammer Hart wie lange ich so eine Lösung suche,
ich danke dir, wie gerne würde ich sowas auch können.

Dank und Gruß

JMP