reinhr
Goto Top

TXT Datei verändern und neu speichern per Batch

Hallo Leute,

ich habe ettliche Transaktionsdateien welche täglich in ein Verzeichnis kopiert werden.
00000001.TXT bis 0000000N.TXT

Dateiinhalt ist jeweils eine Zeile
IA| 50 |G

Ich möchte das jeweils bis zum Delimiter "|" der Wert durch eine feste Feldbreite z.B. 10 Zeichen ersetzt wird.
Den Delimiter "|" brauche ich nicht mehr in der neuen Datei. So wie die nächste Zeile sollte das Ergebnis sein.
0815----------2612---------1-------------- 4-------------21------------1---------------1147628 usw....
123456789012345678901234567890134567890123456789012345678901234567890 <<< Diese Zeile dient nur zur Orientierung
Die Bindestriche sind nur zum verdeutlichen da. In der neuen Datei sollen sie nicht sein.

Kann mir hier jemand helfen

Danke schonmal und Gruß

Roland

Content-Key: 60407

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: bastla
bastla 02.06.2007 um 14:23:39 Uhr
Goto Top
Hallo reinhr und willkommen im Forum!

Unter Verwendung von etwas (temporärem) VB-Script könnte die Umwandlung für eine Datei so aussehen:
@echo off & setlocal
set "PadTemp=%temp%\Pad.vbs"  
set Breite=10
set "Quelle=D:\00000001.txt"  
set "Ziel=D:\00000001-neu.txt"  
echo Felder=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0),1).ReadAll,"|")>"%PadTemp%"  
echo For i=0 To UBound(Felder):Zeile=Zeile^&Left(Trim(Felder(i))^&Space(%Breite%),%Breite%):Next:WScript.Echo Zeile>>"%PadTemp%"  
cscript //nologo "%PadTemp%" "%Quelle%">"%Ziel%"  
echo 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 >>"%Ziel%"  
del "%PadTemp%"  
Da ich nicht weiß, in welche Datei das Ergebnis der Umwandlung geschrieben werden soll, habe ich zum Testen einfach "00000001-neu.txt" verwendet.

Sollte das Ergebnis für Dich OK sein, könntest Du ja noch näher beschreiben, wie die einzelnen Dateien zu behandeln sind (zB nach Umwandlung verschieben/löschen/umbenennen ...), bzw wohin die Ergebnisse sollen.

Die Ausgabe des "Lineals" (123456789012...) in die Zieldatei ist natürlich nur zum Testen gedacht.

Grüße
bastla
Mitglied: reinhr
reinhr 02.06.2007 um 15:10:04 Uhr
Goto Top
Hi Bastla,

echt Klasse!!!

Wie muss ich vorgehen, wenn ich meherer Dateien habe, welech auf einmal verarbeitet werden sollen?

00000001.txt > 00000001-neu.txt
00000002.txt > 00000002-neu.txt
00000003.txt > 00000003-neu.txt

set "Quelle=c:\LIVE\*.txt" ???
set "Ziel=c:\LIVE\" ???

Gruß

Roland
Mitglied: bastla
bastla 02.06.2007 um 15:41:21 Uhr
Goto Top
Hallo reinhr!

Vielleicht nochmals konkret:
  • Müssen die Zieldateien im selben Ordner wie die Quelldateien liegen?
  • Falls ja, müssen die den selben Dateityp (".txt") aufweisen?
  • Falls ja, muss auch der alte Dateiname (zB "00000001") erhalten bleiben?
  • Falls ja, würde ich als neuen Namen die (im Vergleich zum Test oben) umgekehrte Schreibweise "Neu-00000001.txt" vorschlagen, da sonst auch bereits umgewandelte Dateien weiterhin dem Suchmuster "00000*.txt" entsprächen und versucht würde, diese neuerlich umzuwandeln.

Das könnte dann so aussehen:
@echo off & setlocal
set "PadTemp=%temp%\Pad.vbs"  
set Breite=10
set "Quelle=C:\Live\00000*.txt"  
set "Ziel=C:\Live"  
set "Neu=Neu-"  
echo Felder=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0),1).ReadAll,"|")>"%PadTemp%"  
echo For i=0 To UBound(Felder):Zeile=Zeile^&Left(Trim(Felder(i))^&Space(%Breite%),%Breite%):Next:WScript.Echo Zeile>>"%PadTemp%"  
for %%i in ("%Quelle%") do cscript //nologo "%PadTemp%" "%%i" >"%Ziel%\%Neu%%%~nxi%"  
del "%PadTemp%"  

Grüße
bastla
Mitglied: reinhr
reinhr 02.06.2007 um 15:50:45 Uhr
Goto Top
Hi Bastla,

einwandfrei - genau so hatte ich mir das vorgestellt - echt super!

Vielen, vielen Dank

Gruß

Roland