Leerzeichen am Ende einer Variablen entfernen
Leerzeichen am Ende einer Variablen entfernen
Hallo zusammen,
ich stehe gerade leider auf dem Schlauch bei der Lösung des o.g. Problems. Ich extrahiere aus einer Textdatei immer eine bestimmte Zeile. Das erreiche ich hiermit:
Leider befindet sich am Ende der Variablen dann immer ein Leerzeichen. Der Versuch dieses mit
zu entfernen klappt leider nicht. Wie kann ich dieses Leerzeichen entfernen?
Danke
VG
Hallo zusammen,
ich stehe gerade leider auf dem Schlauch bei der Lösung des o.g. Problems. Ich extrahiere aus einer Textdatei immer eine bestimmte Zeile. Das erreiche ich hiermit:
for /f "delims=" %%i in ('findstr /n . %file% ^| findstr "^2:"') do set "line=%%i" && echo !line:~2! | clip
Leider befindet sich am Ende der Variablen dann immer ein Leerzeichen. Der Versuch dieses mit
set "line=%line: =%"
zu entfernen klappt leider nicht. Wie kann ich dieses Leerzeichen entfernen?
Danke
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62139518183
Url: https://administrator.de/contentid/62139518183
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
11 Kommentare
Neuester Kommentar
Nope. Auch hier liegt das Problem immer noch zwischen
!line!
und |
. Dieses Leerzeichen gehört zur ECHO Ausgabe und das hat nichts mit dem Wert in der Variablen zu tun.Um das zu lösen (und um ein paar Aufrufe von externen Kommandozeilentools einzusparen) sähe meine Lösung so aus:
set "line="
:: ignoriere die erste Zeile und lese die zweite in Variable line.
<"!file!" (set /p "=" &set /p "line=")
echo(!line!|clip
Grüße
Steffen
Moin @rubberman,
ganz sicher nicht.
Kannst ja ganz einfach mit ...
... oder ...
... durchtesten. 😉
Gruss Alex
Nope. Auch hier liegt das Problem immer noch zwischen
!line!
und |
. Dieses Leerzeichen gehört zur ECHO Ausgabe und das hat nichts mit dem Wert in der Variablen zu tun.ganz sicher nicht.
Kannst ja ganz einfach mit ...
$test = "Test "
echo $test | clip
... oder ...
$test = "Test"
echo $test | clip
... durchtesten. 😉
Gruss Alex
Moin @steffen,
nice, schon wieder was dazugelernt, danke. 👍
Wobei ich das wahrscheinlich nicht wirklich anwenden werde, da ich die letzten 10 Jahre noch nie PowerShell aus einer Batch ausführen musste. Aber ja, was nicht ist, kann ja immer noch werden. 🙃
Gruss Alex
Die beiden verhalten sich fundamental anders.
Anders gesagt, ich brauch das nicht durchzutesten, da ich weiß dass dein PowerShell Code funktioniert. Aber eben nicht so in einem Batch Code. Und das hab ich eben noch mal getestet
Anders gesagt, ich brauch das nicht durchzutesten, da ich weiß dass dein PowerShell Code funktioniert. Aber eben nicht so in einem Batch Code. Und das hab ich eben noch mal getestet
nice, schon wieder was dazugelernt, danke. 👍
Wobei ich das wahrscheinlich nicht wirklich anwenden werde, da ich die letzten 10 Jahre noch nie PowerShell aus einer Batch ausführen musste. Aber ja, was nicht ist, kann ja immer noch werden. 🙃
Gruss Alex
Hey Alex
War auch nicht so gemeint. Deine letzten Testcodes waren PowerShell, auch wenn das ganze durch
Grüße
Steffen
Wobei ich das wahrscheinlich nicht wirklich anwenden werde, da ich die letzten 10 Jahre noch nie PowerShell aus einer Batch ausführen musste. Aber ja, was nicht ist, kann ja immer noch werden. 🙃
War auch nicht so gemeint. Deine letzten Testcodes waren PowerShell, auch wenn das ganze durch
echo
(als Alias für das Write-Output
CmdLet) einem Batch Code ähnlich sieht. Die Verwendung des Dollarzeichens für Variablen hat mir aber letztlich verraten dass du in der PowerShell unterwegs warst und nicht in Batch Grüße
Steffen
Hallo @roachman
Der Filestream wird in den Klammerausdruck umgeleitet und bleibt somit geöffnet solange bis darin alles abgearbeitet ist. Die SET /P Anweisungen lesen jeweils eine Zeile aus dem Stream. Die erste sieht etwas wild aus, da sie keinen Variablenname enthält. Heißt, die erste Zeile wird zwar gelesen, kann aber nirgends zugewiesen werden und wird dadurch verworfen.
Die kannst du auch durch ein Leerzeichen ersetzen. Ist nur dafür da dass wenn die Variable mal nicht definiert ist (also z.B. eine Leerzeile in der Datei ist) du keine wilden Dinge wie
Auch OK. Du kannst den Doppelpunkt dann aber als Delimiter definieren um dir hinten raus die Variablenmanipulation (Wegschneiden der Zeilennummer) zu ersparen. Ungetestet:
Grüße
Steffen
Danke Steffen, das hat funktioniert! Auch wenn mir aktuell bei dem Code nicht klar ist, warum die erste Zeile übersprungen wird.
Der Filestream wird in den Klammerausdruck umgeleitet und bleibt somit geöffnet solange bis darin alles abgearbeitet ist. Die SET /P Anweisungen lesen jeweils eine Zeile aus dem Stream. Die erste sieht etwas wild aus, da sie keinen Variablenname enthält. Heißt, die erste Zeile wird zwar gelesen, kann aber nirgends zugewiesen werden und wird dadurch verworfen.
Was mich auch interessiert, ist in Zeile 4 das die Klammer an der Stelle nur geöffnet wird?
Die kannst du auch durch ein Leerzeichen ersetzen. Ist nur dafür da dass wenn die Variable mal nicht definiert ist (also z.B. eine Leerzeile in der Datei ist) du keine wilden Dinge wie
ECHO ist ausgeschaltet (OFF).
in deiner Zwischenablage findest, was eher verwirrend als hilfreich wäre. In Uralt-Codes wirst du vermutlich eher einen Punkt als eine öffnende Klammer an dieser Stelle finden. Der kann aber erhebliche Nebeneffekte verursachen und ist eher der Worst Case aller infrage kommenden Trennzeichen zu diesem Zweck.Da es nicht immer die zweite Zeile sein muss die ich Auswerte, habe ich den alten code mit deinem Kombiniert sodass ich es nun so nutze.
Auch OK. Du kannst den Doppelpunkt dann aber als Delimiter definieren um dir hinten raus die Variablenmanipulation (Wegschneiden der Zeilennummer) zu ersparen. Ungetestet:
for /f "tokens=1* delims=:" %%i in ('findstr /n . %file% ^| findstr "^2:"') do echo(%%j|clip
Grüße
Steffen
Moin Steffen,
und ich war mir gerade wegen "|" eigentlich ganz sicher, dass der TO in Power-Shell unterwegs war.
Denn bis zu diesem Post und deinem Kommentar, war es mir bisher nicht wirklich bewusst, dass ich "|" so ähnlich wie auch bei Power-Shell auch in einem Batch Code verwenden kann ... 😬 ... Schande über mein Haupt ... ein wenig zumindest ... denn selbst als ein älterer Hase ... ähm, ja, OK OK, denn selbst als ein älterer Fuchs, hat man in der IT noch lange nicht wirklich ausgelernt. 😁
Daher liebe ich diesen Job auch so sehr ... meistens zumindest. 🤪
Gruss Alex
War auch nicht so gemeint. Deine letzten Testcodes waren PowerShell, auch wenn das ganze durch
echo
(als Alias für das Write-Output
CmdLet) einem Batch Code ähnlich sieht. Die Verwendung des Dollarzeichens für Variablen hat mir aber letztlich verraten dass du in der PowerShell unterwegs warst und nicht in Batch und ich war mir gerade wegen "|" eigentlich ganz sicher, dass der TO in Power-Shell unterwegs war.
Denn bis zu diesem Post und deinem Kommentar, war es mir bisher nicht wirklich bewusst, dass ich "|" so ähnlich wie auch bei Power-Shell auch in einem Batch Code verwenden kann ... 😬 ... Schande über mein Haupt ... ein wenig zumindest ... denn selbst als ein älterer Hase ... ähm, ja, OK OK, denn selbst als ein älterer Fuchs, hat man in der IT noch lange nicht wirklich ausgelernt. 😁
Daher liebe ich diesen Job auch so sehr ... meistens zumindest. 🤪
Gruss Alex