freshman2017
Goto Top

Leerzeichen am Ende (innerhalb) einer .txt Datei entfernen

Guten Abend,

ich habe da noch mal eine Frage; innerhalb einer .txt habe ich am Ende 1x Leerzeichen und dann ein carriage return (eingabetaste) stehen,
kann das über ein Batch File entfernt werden?

Beste Grüße!

Content-ID: 366796

Url: https://administrator.de/forum/leerzeichen-am-ende-innerhalb-einer-txt-datei-entfernen-366796.html

Ausgedruckt am: 14.04.2025 um 15:04 Uhr

chesstiger
chesstiger 03.03.2018 um 00:34:37 Uhr
Goto Top
Mit Batch alleine fällt mir so nichts (elegantes) ein. Mit diversen Skriptsprachen ist das ziemlich trivial lösbar. Als Beispiel will ich einfach mal AutoIt nennen.

Entweder macht man das dann, indem man in einer Schleife alle Zeilen durchgeht und das letzte Zeichen entfernt, falls es ein Leerzeichen ist.
Oder man nutzt einen eleganteren regulären Ausdruck. Könnte in AutoIt dann so aussehen, wobei der RegEx ungetestet ist:
1
2
3
$sContent = FileRead("myfile.txt")  
$sContent = StringRegExpReplace($sContent, "(?m)(.+?)\h+$", "\1")  
FileWrite("myfile.txt", $sContent)  
certifiedit.net
certifiedit.net 03.03.2018 um 01:53:57 Uhr
Goto Top
1
2
3
4
SetLocal EnableDelayedExpansion
set Params=%*
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b  
exit /b
?!
Pedant
Pedant 03.03.2018 um 09:31:23 Uhr
Goto Top
Hallo freshman2017,

wenn es nicht automatisch sein soll, sondern spontan, im Einzelfall und händisch, dann mach ich das mit Word.
Textdateiinhalt von notepad in eine leere Worddatei kopieren.
Leerzeichen^p ersetzen mit ^p.
Dann wieder zurück ins notepad in die Textdatei kopieren.

Gruß Frank
certifiedit.net
certifiedit.net 03.03.2018 um 10:13:03 Uhr
Goto Top
Dann kann er auch notepad++ nehmen...
aqui
aqui 03.03.2018 um 12:56:54 Uhr
Goto Top
Er sagt ja nicht für welches OS. Wenn er kein Winblows Knecht ist, ist awk das Mittel der Wahl:
https://www.heise.de/ct/ausgabe/2014-22-Textverarbeitung-auf-der-Kommand ...
freshman2017
freshman2017 04.03.2018 aktualisiert um 01:48:54 Uhr
Goto Top
Danke für Eure Antworten. Hiebei hanfelt es sich um Windows.

Es handelt sich hier um eine .txt die mit Werten durch ; getrennt aus einem System kommt. Beim Export dieser Datei wird aus unerklärlichen Gründen ein Leerzeichen und ein Cariage Return (als ob die Eingabetaste gedrückt wird) eingefügt.

Da die Datei relativ groß ist, dachte ich dass es durch ein Batch Skript entfernt werden kann. Bspw. alles entfernen bis zum letzten ; .

Der Export sollte eigentlich nur mit einem ; enden und zusätzlich mit einer leertaste und eine cr.
colinardo
Lösung colinardo 04.03.2018 aktualisiert um 19:06:33 Uhr
Goto Top
Servus freshman2017,
Ich denke mal es geht um deinen letzten Beitag. Wenn ja dann benutze beim Befehl (Set-Content /Alias sc) welcher deine Ausgabe generiert den Parameter -NoNewLine, denn per Default erzeugt Set-Content einen Zeilenumbruch. Mit dem Parameter wird das verhindert.

Hier im Kontxt deines letzten Threads
1
2
@echo off
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:Userprofile\Test\test.csv\" -Delimiter ';' | %%{@('K',$_.TEST5, $_.TEST4) -join ';' }) -join ';') + ";"  | sc \"$env:Userprofile\test\test.txt\" -NoNewLine"  
Dann kannst du nämlich das nachträgliche Ersetzen ad acta legen.

Grüße Uwe
freshman2017
freshman2017 04.03.2018 um 21:43:19 Uhr
Goto Top
Moin colinardo,

genau das hatte ich gesucht, vielen Dank.

Ich habe den ursprünglichen Code nochmal umgebaut:

1
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:USERPROFILE\TEST\test.csv\" -Delimiter ';' -Encoding Default) | %%{\"$('K');$($_.'Betrag');$('Ja');$($_.'Datum '.replace(' ',''));\"}) -join '' | set-content -NoNewLine \"$env:USERPROFILE\TEST\test.txt\""  

Kann ich hier zusätzlich dafür sorgen, dass die Zeile aus der .csv nur übernommen wird, wenn 'Betrag' größer 0 ist?
colinardo
Lösung colinardo 04.03.2018 um 22:01:49 Uhr
Goto Top
Kannst du, indem du einfach ein where-object in die Pipeline legst:
1
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:USERPROFILE\TEST\test.csv\" -Delimiter ';' -Encoding Default) | ?{[Double]$_.Betrag -gt 0} | %%{\"$('K');$($_.'Betrag');$('Ja');$($_.'Datum '.replace(' ',''));\"}) -join '' | set-content -NoNewLine \"$env:USERPROFILE\TEST\test.txt\""