Mehrere Leerzeichen per Batch löschen
Hallo, es gibt zwar eine ähnliche Anfrage, aber die hat mein Problem nicht beantwortet.
Ich möchte aus einer Exportdatei mehrere aufeinanderfolgende Leerzeichen löschen.
Wie müsste der Befehl dazu lauten?
Ich möchte aus einer Exportdatei mehrere aufeinanderfolgende Leerzeichen löschen.
Wie müsste der Befehl dazu lauten?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 123362
Url: https://administrator.de/forum/mehrere-leerzeichen-per-batch-loeschen-123362.html
Ausgedruckt am: 11.04.2025 um 17:04 Uhr
10 Kommentare
Neuester Kommentar
Hallo afrodyte,
du könntest das evtl. so lösen:
Grüße
rubberman
du könntest das evtl. so lösen:
@echo off &setlocal
set inFile=test1.txt
set outFile=test2.txt
type nul>"%outFile%"
for /f "delims=: tokens=1*" %%i in ('findstr /n $ "%inFile%"') do set "Zeile=%%j" &call :loop
goto :eof
:loop
if not defined Zeile (echo.>>"%outFile%") &goto:eof
for /f "tokens=1*" %%a in ("%Zeile%") do set "wort=%%a" &set "Zeile=%%b"
set "output=%output% %wort%"
if not defined Zeile (goto ausgabe) else goto loop
:ausgabe
echo.%output:~1%>>"%outFile%"
set "output="
goto :eof
Grüße
rubberman
Hallo afrodyte!
Da rubbermans Lösung eigentlich nur je ein Leerzeichen belassen dürfte, wäre es sinnvoll, einige (anonymisierte) Zeilen aus der Exportdatei (unter Verwendung der ""-Formatierung) zu posten, um das Problem damit nachvollziehen zu können.
Außerdem: Wenn "mehrere aufeinanderfolgende Leerzeichen" gelöscht werden sollen und von 9 nur 2 übrig blieben, wäre die Anforderung eigentlich erfüllt
- daher formuliere bitte etwas genauer, ob alle der mehreren Leerzeichen eliminiert oder doch auf nur eines reduziert werden bzw wie einzelne vorhandene Leerzeichen behandelt werden sollen ...
@rubberman
Eine Anmerkung zum "findstr": Wenn die letzte Zeile keine Zeilenschaltung enthält, wird sie durch den Suchbegriff "$" auf der Strecke bleiben - wenn Du alternativ "^" (mit Anführungszeichen geschrieben) verwendest, kann das nicht passieren.
Grüße
bastla
Da rubbermans Lösung eigentlich nur je ein Leerzeichen belassen dürfte, wäre es sinnvoll, einige (anonymisierte) Zeilen aus der Exportdatei (unter Verwendung der ""-Formatierung) zu posten, um das Problem damit nachvollziehen zu können.
Außerdem: Wenn "mehrere aufeinanderfolgende Leerzeichen" gelöscht werden sollen und von 9 nur 2 übrig blieben, wäre die Anforderung eigentlich erfüllt
@rubberman
Eine Anmerkung zum "findstr": Wenn die letzte Zeile keine Zeilenschaltung enthält, wird sie durch den Suchbegriff "$" auf der Strecke bleiben - wenn Du alternativ "^" (mit Anführungszeichen geschrieben) verwendest, kann das nicht passieren.
Grüße
bastla
@rubberman


Grüße
bastla
jetzt hab ich die Lösung
Was meinst Du wohl, von wem die stammt ... (und das ganz ohne danach gefragt zu haben
)
Gelegentlich fehlt's mir an Zurückhaltung ... Grüße
bastla
Hallo afrodyte!
Mit native Batch lässt sich das zwar auch lösen, aber mit ein wenig eingebettetem VBScript ist es einfacher:
Es kann bei Bedarf auch "in" der Datei ersetzt werden - dazu einfach für %outFile% die selbe Datei wie für %inFile% angeben.
Ganz ohne Umweg über einen Batch sähe das VBScript so aus
und könnte mit
aufgerufen werden.
Grüße
bastla
Mit native Batch lässt sich das zwar auch lösen, aber mit ein wenig eingebettetem VBScript ist es einfacher:
@echo off & setlocal
set "inFile=test1.txt"
set "outFile=test2.txt"
set R=%temp%\RemoveBlanks.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject")
>>%R% echo T=fso.OpenTextFile(WScript.Arguments(0)).ReadAll
>>%R% echo Set rE=New RegExp:re.Pattern=" {2,}":re.Global=True
>>%R% echo fso.CreateTextFile(WScript.Arguments(1),True).Write rE.Replace(T,"")
cscript //nologo %R% "%inFile%" "%outFile%"
Ganz ohne Umweg über einen Batch sähe das VBScript so aus
Set fso=CreateObject("Scripting.FileSystemObject")
T=fso.OpenTextFile(WScript.Arguments(0)).ReadAll
Set rE=New RegExp
re.Pattern=" {2,}"
re.Global=True
fso.CreateTextFile(WScript.Arguments(1),True).Write rE.Replace(T,"")
cscript //nologo "RemoveBlanks.vbs" "test1.txt" "test2.txt"
Grüße
bastla
@bastla,
gut dass wenigstens Du verstanden hast, wie das ganze gemeint war. Nachdem ich mir Dein VBScript angesehen habe, hab ich's auch kapiert. Hätte da zwar auch noch einen Batchgedanken in petto, aber Du hast recht, vbs ist sinnvoller (sicherer und zig mal schneller).
Ja, und dann war wohl noch das "Urheber-Danke" an Biber fällig
gut dass wenigstens Du verstanden hast, wie das ganze gemeint war. Nachdem ich mir Dein VBScript angesehen habe, hab ich's auch kapiert. Hätte da zwar auch noch einen Batchgedanken in petto, aber Du hast recht, vbs ist sinnvoller (sicherer und zig mal schneller).
Ja, und dann war wohl noch das "Urheber-Danke" an Biber fällig
Hallo afrodyte!
Anyhow, wenn Du
durch
ersetzt, sollte auch dieses letzte Leerzeichen Geschichte sein.
Grüße
bastla
Leider bleibt auch bei dieser Befehlskette ein Leerzeichen am Ende der Zeile stehen.
Dann war dort vermutich auch vorher bereits ein einzelnes solches ...Anyhow, wenn Du
Write rE.Replace(T,"")
Write RTrim(rE.Replace(T,""))
Grüße
bastla