Batch Leerzeichen-Tabs an Zeilenenden entfernen
Hallo guten Tag,
folgende Situation. Wir müssen mehrfach am Tag bei uns Daten von einem FTP Server holen und zum verarbeiten zusammen kopieren, dies habe ich sehr gut gelöst mit (If Exist usw.).
Jetzt kommt es aber teilweise vor das manche Zeilen endlos Leerzeichen noch am Ende haben die vom eigentlichem Verarbeitungsprogramm dann nicht verarbeitet werden können.
Beispiel:
Q0010024P18950 14840 18950
Hinter 18950 befinden sich noch 10Leerzeichen, kann man mit einem Batchjob diese Leerzeichen am Ende entfernen?
Habe so noch nichts produktives dazu gefunden. Wichtig es muss ein Batchjob sein kein VBScript.
Ein zugehen auf den Absender der Fehlerhaften Daten erfolglos, ein zugehen auf den DL des Verarbeitungsprogramms erfolglos, da dies zu fehlern innerhalb der Verarbeitung der Enddaten führt.
Grüße
folgende Situation. Wir müssen mehrfach am Tag bei uns Daten von einem FTP Server holen und zum verarbeiten zusammen kopieren, dies habe ich sehr gut gelöst mit (If Exist usw.).
Jetzt kommt es aber teilweise vor das manche Zeilen endlos Leerzeichen noch am Ende haben die vom eigentlichem Verarbeitungsprogramm dann nicht verarbeitet werden können.
Beispiel:
Q0010024P18950 14840 18950
Hinter 18950 befinden sich noch 10Leerzeichen, kann man mit einem Batchjob diese Leerzeichen am Ende entfernen?
Habe so noch nichts produktives dazu gefunden. Wichtig es muss ein Batchjob sein kein VBScript.
Ein zugehen auf den Absender der Fehlerhaften Daten erfolglos, ein zugehen auf den DL des Verarbeitungsprogramms erfolglos, da dies zu fehlern innerhalb der Verarbeitung der Enddaten führt.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 563411
Url: https://administrator.de/contentid/563411
Ausgedruckt am: 24.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Moin,
Mit Batch musst du hallt einen Loop bauen, etwa so:
Das kann bei sehr vielen Dateien allerdings unter Umständen eine Hohe Laufzeit haben. Eine weitere Möglichkeit, falls die Dateinamen immer aus drei Teilen bestehen, wäre sie mit einer For-Schleife zu splitten
Gruß Thomas
Zitat von @Tearsofsun:
Habe so noch nichts produktives dazu gefunden. Wichtig es muss ein Batchjob sein kein VBScript.
also auch kein Powershell? Damit wäre es ein Einzeiler.Habe so noch nichts produktives dazu gefunden. Wichtig es muss ein Batchjob sein kein VBScript.
Mit Batch musst du hallt einen Loop bauen, etwa so:
set file=Q0010024P18950 14840 18950
goto :Check
:Loop
set File=%File:~0,-1%
:Check
if "%File:~-1%" equ " " goto :Loop
@echo off
set Pfad=C:\Test
for %%A in ("%Pfad%\*") do (
for /f "Tokens=1-3" %%B in ("%%~nA") do Ren "%%A" "%%B %%C %%D%%~xA"
)
Gruß Thomas
Bitte immer Code-Tags für das posten von Code verwenden.
"R:\Pfad\zur\Inputdatei.dat" und "R:\Pfad\zur\Outputdatei.dat" müssen natürlich angepasst werden.
Gruß Thomas
Zitat von @Tearsofsun:
das erste funktioniert nicht, eventuell weil Dir eventuell eine Information fehlt oder ich falsch beschrieben habe ; )
Sicher funktioniert das. Das Zeilenweise einlesen musst du natürlich über eine For-Schleife regeln.das erste funktioniert nicht, eventuell weil Dir eventuell eine Information fehlt oder ich falsch beschrieben habe ; )
Interessant wäre wenn es Möglich ist am Ende der Batch die funktion der überflüssigen Leerzeichen auf die geschriebenen Dateien auszuführen.
Kein Problem. Den Loop einfach ans Ende des Skript setzen und aus der For-Schleife heraus callen.for /f "Usebackq Delims=" %%A in ("R:\Pfad\zur\Inputdatei.dat") do (
set Zeile=%%A
call :Check
)
:: Nachfolgenden Bereich ans Ende des Skripts packen
goto :EoF
:Loop
set Zeile=%Zeile:~0,-1%
:Check
if "%Zeile:~-1%" equ " " (goto :Loop) else (>>"R:\Pfad\zur\Outputdatei.dat" echo %Zeile%)
Gruß Thomas
Zitat von @Tearsofsun:
Die For-Schleife ist so auch nicht richtig! So wird das call :Check als Zeichenkette mit in die Variable geschrieben.for /f "Usebackq Delims=" %%A in ("R:\Lohmoeller\DFU\STAT") do (set Zeile=%%A call :Check)
Entweder, wie ich oben gepostet habe mit Zeilenumbrüchen, oder wenn schon in einer Zeile, dann mit && dazwischen.
for /f "Usebackq Delims=" %%A in ("R:\Lohmoeller\DFU\STAT") do (set Zeile=%%A&&call :Check)