marcelgausg
Goto Top

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 ... face-smile

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

Content-ID: 63158

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

bastla
bastla 06.07.2007 um 10:36:50 Uhr
Goto Top
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.
'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)
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:
cscript //nologo "C:\Scripts\Remove1.vbs" "D:\Bestellungen\IVSP5850.406598" 
Eine Batchdatei zum Bearbeiten aller Bestelldateien (des Ordners "D:\Bestellungen") könnte so aussehen:
@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
miniversum
miniversum 06.07.2007 um 10:55:22 Uhr
Goto Top
Und hier die Pure-Batch lösung dazu.
@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
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.
MarcelGausG
MarcelGausG 06.07.2007 um 12:11:17 Uhr
Goto Top
hallo bastla ...

du bist ne wucht ..... super.... klappt einwandfrei.... danke für die schnelle hilfe ...

*aufdiekniefall*

;)

cu