Letzes Wort eines Strings entfernen
Hallo,
ich habe da ein Problem mit dem set Befehl und dem Umgang mit Variablen
Ausgangssitiation: ich habe einen String mit mehreren Worten (Argumenten).
Der Inhalt dieser Argumente kann bei diversen Aufrufen, auch unterschiedlich sein
Bsp -s server1 -c client2 -g gruppe -N Name1 Name1
Ich will jetzt von diesem String eben das letzte Argument, also einmal Name1, abschneiden und später ersetzen
Wie gesagt, ist das kein fester String, sondern von Aufruf zu Aufruf verschieden
Ich habe nun den gesamten String in der Variable ARGS und das letzte Argument in der Variable LASTARG
Per Längenermittlung und Co war ich bereits in der Lage zu ermitteln wieviele Zeichen ich von dem String eigentlich überbehalten will.
Dieser Wert steht in der Variable CUTLENGHT
und mein Versuch lautete
set "ARGS=%ARGS:~0,%CUTLENGHT%%"
Aber das Ergebnis ist ...
CUTLENGHT%
Häh ?
Auch weitere Versuche schlugen fehl
set "ARGS=%%ARGS:~0,%CUTLENGHT%%"
--> %ARGS:~0,133
set "ARGS=%ARGS:~0,%%CUTLENGHT%%"
--> 133
Wie muss ich denn diesen Setbefehl nun aufbauen damit er mir nur die Zeichen 0 - 133 in die Variable ARGSeinlesen kann ... wobei eben die 133 ja auch mal ne 132 oder irgendwas anderes sein kann .. eben abhängig von der länge des Ausgangsstrings "ARGS"
Ach ja und die Replace Funktion vom set, läuft beim Verwenden von Variablen zum einen auf dieselbe Formatierungsproblematik, zum anderen für nicht brauchbar, da der zu ersetzende String auf jeden Fall zweimal vorkommt, aber nur einmal ersetzt werden muss.
Verweise auf andere Scriptsprachen wie z.B.: VBS oder auch powershell u.ä. sind im übrigen nicht hilfreich.
Das Script mus auf diversen Windowskisten laufen und dabei teilweise unter UserAccounts die sowas nicht nutzen dürfen.
Wäre dankbar für Hilfe
Gruß
Mascaren
ich habe da ein Problem mit dem set Befehl und dem Umgang mit Variablen
Ausgangssitiation: ich habe einen String mit mehreren Worten (Argumenten).
Der Inhalt dieser Argumente kann bei diversen Aufrufen, auch unterschiedlich sein
Bsp -s server1 -c client2 -g gruppe -N Name1 Name1
Ich will jetzt von diesem String eben das letzte Argument, also einmal Name1, abschneiden und später ersetzen
Wie gesagt, ist das kein fester String, sondern von Aufruf zu Aufruf verschieden
Ich habe nun den gesamten String in der Variable ARGS und das letzte Argument in der Variable LASTARG
Per Längenermittlung und Co war ich bereits in der Lage zu ermitteln wieviele Zeichen ich von dem String eigentlich überbehalten will.
Dieser Wert steht in der Variable CUTLENGHT
und mein Versuch lautete
set "ARGS=%ARGS:~0,%CUTLENGHT%%"
Aber das Ergebnis ist ...
CUTLENGHT%
Häh ?
Auch weitere Versuche schlugen fehl
set "ARGS=%%ARGS:~0,%CUTLENGHT%%"
--> %ARGS:~0,133
set "ARGS=%ARGS:~0,%%CUTLENGHT%%"
--> 133
Wie muss ich denn diesen Setbefehl nun aufbauen damit er mir nur die Zeichen 0 - 133 in die Variable ARGSeinlesen kann ... wobei eben die 133 ja auch mal ne 132 oder irgendwas anderes sein kann .. eben abhängig von der länge des Ausgangsstrings "ARGS"
Ach ja und die Replace Funktion vom set, läuft beim Verwenden von Variablen zum einen auf dieselbe Formatierungsproblematik, zum anderen für nicht brauchbar, da der zu ersetzende String auf jeden Fall zweimal vorkommt, aber nur einmal ersetzt werden muss.
Verweise auf andere Scriptsprachen wie z.B.: VBS oder auch powershell u.ä. sind im übrigen nicht hilfreich.
Das Script mus auf diversen Windowskisten laufen und dabei teilweise unter UserAccounts die sowas nicht nutzen dürfen.
Wäre dankbar für Hilfe
Gruß
Mascaren
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 220444
Url: https://administrator.de/forum/letzes-wort-eines-strings-entfernen-220444.html
Ausgedruckt am: 15.04.2025 um 10:04 Uhr
5 Kommentare
Neuester Kommentar
Hi,
ein Beispiel:
ergibt:
lg.
ein Beispiel:
@ECHO OFF &SETLOCAL
set "ARGS=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
set /a CUTLENGHT=133
call set "CUTARGS=%%ARGS:~0,%CUTLENGHT%%%"
echo %CUTARGS%
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
...bzw alternativ mit "
Das letzte Wort sollte sich übrigens auch so entfernen lassen:
Grüße
bastla
delayedExpansion
":@ECHO OFF &SETLOCAL enabledelayedexpansion
set "ARGS=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
set /a CUTLENGTH=133
set "CUTARGS=!ARGS:~0,%CUTLENGTH%!"
@echo off & setlocal enabledelayedexpansion
set "Args=Bsp -s server1 -c client2 -g gruppe -N Name1 Name1"
for %%i in (%Args%) do set /a Anz+=1
set /a Anz-=1
for %%i in (%Args%) do (
if !Anz! gtr 0 set "CutArgs=!CutArgs! %%i"
set /a Anz-=1
)
set "CutArgs=%CutArgs:~1%"
echo %CutArgs%
bastla