Batchdatei bei einem Dateinamen rechts die Leerzeichen entfernen

H

HoDam

Gast
Hallo zusammen,
bei uns werden Dateinamen aus einem zu übergebenden Variable (String) erstellt. Grundsätzlich keine Problem.
Die Strings haben keine feste Zeichenanzahl sind aber insgesamt auf 50 Zeichen begrenzt und können auch Leerzeihen zwischen den Zeichen enthalten
Ist der Text kürzer als 50 Zeichen wird bis zum 50 Zeichen mit Leerzeichen aufgeüllt
Diesen Übergabe kann ich nicht ändern.

Beispiel
"Das ist ein Text mit Leerzeichen " (die rechts liegenden Leerzeichen werden hier im der Forumssoftware nicht angezeigt iat ein Stringlänge von 50 Zeichen

Jetzt soll rechts liegende Leerzeichen entfernt werden.
ich schaffe es alle Leerzeichen in diesem Sttring zu entfernen


Code:
Setlocal enabledelayedexpansion

Set "Pattern= "
Set "Replace="

For %%a in (*.txt) Do (
    Set "String=%%~a"
    Ren "%%a" "!String:%Pattern%=%Replace%!"
)

Ergebnis: "DasisteinTextmitLeerzeichen"



Aber wie schaffe ich es nur Leerzeichen rechts vom letzten Zeichen zu löschen. Die Leerzeichen im String sollen erhalten bleiben

"Das ist eine Text mit Leerzeichen"

Dankeschön

HoDam
 
Zuletzt bearbeitet von einem Moderator: (Tippfehler)
Anmerkung: Leerzeichen in Pfaden sind generell nicht sinnvoll.
Die sollte man durch etwas anderes ersetzen.

Auch die Vorstellung, dass eine Software, aus welchen Gründen auch immer, eine fixe Dateinamenlänge (mit Leerzeichen) auffüllt, ist gruselig.

Ich sehe hier ein XY-Problem.
 
  • Gefällt mir
Reaktionen: Bitopium
Danke .
Werde ich mir genauer anschauen und dann rückmelden

HoDam
 
Wasserhuhn schrieb:
Anmerkung: Leerzeichen in Pfaden sind generell nicht sinnvoll.
Die sollte man durch etwas anderes ersetzen.
Nein, sollte man nicht. Leerzeichen sind erlaubte Bestandteile eines Datei- und Verzeichnisnamens und dürfen daher auch genutzt werden. Nur weil manche Software (vor allem ältere) damit teilweise nicht zurechtkommt, werde ich mich ganz sicher nicht einschränken.

Grundsätzlich ist es die Aufgabe des Entwicklers dafür zu sorgen, dass alle Arten von Dateinamen akzeptiert werden.
 
  • Gefällt mir
Reaktionen: tollertyp
@SubNatural: Dachte ich auch. Als nächstes kommt noch die Empfehlung, nur das 8.3-Schema zu verwenden und Dateien größer als 4 GB auch zu unterlassen... Im Grunde hasse ich auch immer, wenn bei einem Script/Tool diese Empfehlung steht, weil sie spricht eigentlich überwiegend für die Inkompetenz der Macher.

Eine sinnvolle Empfehlung btw. wäre, wenn möglich auf die wesentlich elegantere PowerShell zu wechseln. PowerShell-Befehle lassen sich auch aus Batch heraus aufrufen. In PowerShell gibts dafür sicher den Trim-Befehl (bzw. Methode).

In PowerShell z.B.
Code:
Get-ChildItem '* .txt' | rename-item -newname { $_.name -replace ' *\.txt$','.txt' }
Erst mal: Suche nur nach Dateien, die auch ein Leerzeichen am Ende haben.
Dann beliebig viele Leerzeichen vor der Erweiterung beim Umbenennen entfernen.

Das ganze lässt sich auch aus einer Batch-Datei heraus aufrufen:
Code:
powershell "Get-ChildItem '* .txt' | rename-item -newname { $_.name -replace ' *\.txt$','.txt' }"
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: SubNatural
Was ihr sagt, ist beides grundsätzlich korrekt.
Allerdings ist man selber nicht für andere Software, für die man wahrscheinlich auch keinen Quellcode hat, verantwortlich.
Man ist daher leider gezwungen auf Nummer sicher zu gehen.
Ich bin ja Fahrradfahrer. Und wenn ich mich darauf verlassen würde, dass man mir mein Recht auf Vorfahrt lässt (hier die Annekdote an andere Software, die sich an die Regeln hält), wäre ich bei der nächsten Fahrt in die Innenstadt (und ich lebe in einer recht kleinen Stadt) schwerst verletzt oder tot.

Ein weiteres Problem mit Leerzeichen in Pfaden sind bspw. auch mehrere Parser, die nacheinander einen Argstring bearbeiten müssen. Da werden gerne die ursprünglich angehangenen Anführungszeichen verschluckt, und der nächste Parser wirft dann einen Fehler aus.
 
  • Gefällt mir
Reaktionen: Incanus
Wie gesagt, und manche kommen höchstens mit 8.3 aus... Sicher ist sicher.
 
Ich sehe, es ist keine sachliche Diskussion gewünscht.
Zum Glück kann ein interessierter Leser, bspw. der Themenersteller, für sich selber entscheiden, wie er was zu interpretieren hat.
 
Auch noch Cherrypicking um zu provozieren. Man kann ja auch theoretisch die darauf folgenden Posts lesen. Ein "tollertyp". Ich bin raus. 👋
 
  • Gefällt mir
Reaktionen: Incanus
Hast ja zur Lösung eh nichts beizutragen gehabt.
Ergänzung ()

Hätte das nicht einfach funktioniert?
ja, hätte es

Code:
Setlocal enabledelayedexpansion

Set "Pattern= .txt"
Set "Replace=.txt"

For %%a in ("* .txt") Do (
    Set "String=%%~a"
    Ren "%%a" "!String:%Pattern%=%Replace%!"
)

Aber die PowerShell finde ich nach wie vor eleganter. Hier werden auch keine Mehrfachleerzeichen ersetzt, sondern immer nur eines.
 
Zuletzt bearbeitet:
Guten Morgen zusammen,

erst einmal Danke für die verschiedenen Lösungsansätze

mit der Lösungsansatz von xammu ( https://stackoverflow.com/a/32084822 ) bin ich weitergekommen.

Bemerkung: das so eine Anfrage eine interne "Diskussion" auslöst, war nicht meine Absicht.

Die Diskussion über " " oder nicht hat erst mal nichts mit meine Anfrage zu tun.

Das waren/sind gegebene Randbedingenungen, die aus einer älteren Industriesoftware ( LIMS-System ca. 15 Jahre) Schnittstelle kommen und sich auch nicht ändern lässt . Diese Exportdatei wird aus einer Datenbank (noch älter) generiert. Dieses Datenbankdesign hat feste Feldgrößen. Die Inhalte der Felder sind gegeben. Das können wir nun mal nicht ändern. Und für die Feldininhalte/Definition (Strings) sind sicherlich nicht die Programmierer verantwortlich, sondern irgendwelche Produktmanager/Marketingexperten. Dieses Datenbank design wurde vion einem sehr großer Softwarehersteller für den Kunden entwickelt.
Aber die sind wahrscheinlich schon alle in Rente.
Vielleicht ist es der Idealismus von frischen Absolventen die in die Arbeitswelt starten , die zu solchen Aussagen/Statements verführen. Die Arbeitswelt ist nicht schwarz/weiss sondern ziemlich bunt mit vielen Nuancen. (Zum Glück)
und lässt sich nun mal nicht bedingungslos "optimieren" / "normalisieren" und die Industrie ist sehr träge .


Dankeschön HoDam
 
Zurück
Oben