Aus einem Textfile ne Eins löschen
Hallo ihr großen meister da draussen ...
ich bin leider ein totaler noob in sachen batch files schreiben .... deshalb bräucht ich doch mal die hilfe der community ...
zum szenario ( hört sich dramatischer an ;) )
wir kriegen von einem kunden immer bestelldaten in einem textfile die dann in unsere warenwirtschaft konvertiert wird ...
der anfang der files ist immer gleich .. :
UNB+UNOA:2+5450534000000:14+4260117670008:14+070705:0837+11++++1+EANCOM'UNH+1+ORDERS
so ... nun können wir diese files nicht so bei uns implementieren da dieser Einser ++++1+EANCOM unsere programm stört ...
das heisst ... wir müssen jedes file öffnen .. die 1 per hand rauslöschen .... und dann ginge es .. sind aber dann doch ein paar bestellungen am tag ;) einfach nervig.... da dacht ich mir das es da doch bestimmt ne "einfache" lösung gibt....
ach ja ... die dateinamen sind nicht immer gleich ... also das wär zb einer IVSP5850.406598 der vordere teil ( IVSP5850 ) bleibt gleich ... der hintere ändert sich mit jeder bestellung ....
bitte um hilfe....
schon mal danke ..
Marcel
ich bin leider ein totaler noob in sachen batch files schreiben .... deshalb bräucht ich doch mal die hilfe der community ...
zum szenario ( hört sich dramatischer an ;) )
wir kriegen von einem kunden immer bestelldaten in einem textfile die dann in unsere warenwirtschaft konvertiert wird ...
der anfang der files ist immer gleich .. :
UNB+UNOA:2+5450534000000:14+4260117670008:14+070705:0837+11++++1+EANCOM'UNH+1+ORDERS
so ... nun können wir diese files nicht so bei uns implementieren da dieser Einser ++++1+EANCOM unsere programm stört ...
das heisst ... wir müssen jedes file öffnen .. die 1 per hand rauslöschen .... und dann ginge es .. sind aber dann doch ein paar bestellungen am tag ;) einfach nervig.... da dacht ich mir das es da doch bestimmt ne "einfache" lösung gibt....
ach ja ... die dateinamen sind nicht immer gleich ... also das wär zb einer IVSP5850.406598 der vordere teil ( IVSP5850 ) bleibt gleich ... der hintere ändert sich mit jeder bestellung ....
bitte um hilfe....
schon mal danke ..
Marcel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63158
Url: https://administrator.de/contentid/63158
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo MarcelGausG!
Das folgende VB-Script ersetzt (nur) in der ersten Zeile der übergebenen Textdatei den Teil "++++1+EANCOM" durch "+++++EANCOM". Die übergebene Datei wird unter "B-Dateiname" als Sicherungskopie behalten.
Verwendung: Entweder per Drag & Drop die Textdatei auf die Script-Datei (bzw eine Verknüpfung zu dieser) ziehen oder, wenn das Script zB als "C:\Scripts\Remove1.vbs" gespeichert wurde, aus einer Batchdatei/von der Kommandozeile mit:
Eine Batchdatei zum Bearbeiten aller Bestelldateien (des Ordners "D:\Bestellungen") könnte so aussehen:
Grüße
bastla
Das folgende VB-Script ersetzt (nur) in der ersten Zeile der übergebenen Textdatei den Teil "++++1+EANCOM" durch "+++++EANCOM". Die übergebene Datei wird unter "B-Dateiname" als Sicherungskopie behalten.
'Remove1.vbs
If WScript.Arguments.Count < 1 Then
WScript.Echo "Bitte eine Datei als Argument übergeben!"
WScript.Quit(1)
Else
strInFile = WScript.Arguments(0)
End If
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(strInFile) Then
WScript.Echo "Die Datei " & strInFile & " wurde nicht gefunden!"
WScript.Quit(1)
End If
Set objInFile = fso.GetFile(strInFile)
strOutFile = objInFile.Path
If fso.FileExists("B-" & objInFile.Name) Then fso.DeleteFile("B-" & objInFile.Name)
objInFile.Name = "B-" & objInFile.Name
aFileText = Split(fso.OpenTextFile(objInFile.Path, 1).ReadAll, vbCrLF)
aFileText(0) = Replace(aFileText(0), "++++1+EANCOM", "+++++EANCOM")
fso.OpenTextFile(strOutFile, 2, True).Write Join(aFileText, vbCrLF)
cscript //nologo "C:\Scripts\Remove1.vbs" "D:\Bestellungen\IVSP5850.406598"
@echo off
pushd "D:\Bestellungen"
for /f "delims=" %%i in ('dir /b "IVSP5850.*"') do cscript //nologo "C:\Scripts\Remove1.vbs" "%%i"
popd
echo Bearbeitung abgeschlossen.
Grüße
bastla
Und hier die Pure-Batch lösung dazu.
Hier wird immer in der ersten Zeile das 64. Zeichen (die "1") entfernt.
BEi mri wird allerdings die Orginal Datei gleich ersetzt. Willst du das ncith mußt du den move befehl weglassen.
@echo off
set "filefilter=IVSP5850*"
FOR /F "delims=" %%a in ('dir /B /A-D %filefilter%') do call:dofile "%%a"
goto:eof
:dofile
set "line="
FOR /F "delims=" %%i in ('type %1') do if not defined line set "line=%%i"
echo %line:~0,63%%line:~64%>"%~1.tmp"
more +1 %1>>"%~1.tmp"
move "%~1.tmp" %1
goto:eof
BEi mri wird allerdings die Orginal Datei gleich ersetzt. Willst du das ncith mußt du den move befehl weglassen.