mascaren
Goto Top

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

Content-Key: 220444

Url: https://administrator.de/contentid/220444

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: Mascaren
Mascaren 25.10.2013 um 16:28:45 Uhr
Goto Top
Hello again
In der Tat habe ich mein o.g. Problem eben auf andere Art lösen können .. was jedoch nichts an der Frage zu den Maskierungen/Formatierungen von Variablen in so einem Setcommand ändert

Wenn also irgendwer weiss wie man eine Variable maskieren muss in einem Kommando wie ...

set "ARGS=%ARGS:~0,133%"

.. wenn die 133 aus einer Variable ausgelesen werden muss, immer her mit dem Wissen


Meine Lösung lag letztlich darin das ich die Argumente schon eingangs beim Einlesen, der Reihenfolge entsprechend bearbeitete
Mitglied: Endoro
Endoro 25.10.2013 aktualisiert um 18:28:01 Uhr
Goto Top
Hi,
ein Beispiel:
@ECHO OFF &SETLOCAL
set "ARGS=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"  
set /a CUTLENGHT=133
call set "CUTARGS=%%ARGS:~0,%CUTLENGHT%%%"  
echo %CUTARGS%
ergibt:
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
lg.
Mitglied: bastla
bastla 25.10.2013 aktualisiert um 19:34:37 Uhr
Goto Top
...bzw alternativ mit "delayedExpansion":
@ECHO OFF &SETLOCAL enabledelayedexpansion
set "ARGS=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"  
set /a CUTLENGTH=133 
set "CUTARGS=!ARGS:~0,%CUTLENGTH%!"  
Das letzte Wort sollte sich übrigens auch so entfernen lassen:
@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%
Grüße
bastla
Mitglied: Mascaren
Mascaren 26.10.2013 um 12:09:28 Uhr
Goto Top
hm
ich nahm in einem meiner Tests auch
set "ARGS=%%ARGS:~0,%CUTLENGHT%%%"

Kann mein Problem gewesen sein dass ich es in dieselbe Variable einlesen wollte ?

Danke auf jeden Fall
Mitglied: bastla
bastla 26.10.2013 um 12:14:15 Uhr
Goto Top
Hallo Mascaren!
Kann mein Problem gewesen sein dass ich es in dieselbe Variable einlesen wollte ?
Eher das fehlende "call" davor ...

Grüße
bastla