jknapp
Goto Top

Batch, verschachtelte Variable

Hallo Admins,

leider bekomm ich es mal wieder ned auf die Reihe.

Ich versuche einen Text in einer Variablen zu kürzen, anhand einer vorher automatisch ermittelten Anzahl von Zeichen.
Dafür muss ich 2 Variablen verschachteln und habe mich schon dusselig gegoogelt und rumprobiert, aber es funzt einfach ned...


Hier mein Code, der nicht funktioniert:

rem ##Teil 1, funktiniert soweit gut... ##
echo off
set str=Verkäufer: Firma Mustermann, John Nr.: 86
set #=%str%
set length=0
:loop
if defined # (set #=%#:~1%&set /A length += 1&goto loop)
echo %length%
echo on

rem ##Teil 2, funktiniert auch... ##
set /A lenght = %length%-(8+11)
echo %lenght%
pause

rem ##Teil3, funktioniert...##
set str=%str:~11%
echo %str%
pause

rem ## Und hier komm ich ned weiter, vorher ergibt das echo von %str% ein  "Firma Mustermann, John Nr.: 86", wie gewünscht.  
set str=%str:~0,%length%% 

echo Dateiname:%str%
rem ## Da kommt jetzt nur noch Müll raus !


Ich bin mir sicher, dass die Lösung super einfach ist, aber...
Wenn ich das letzte %Length% durch die richtige Zahl ersetze funktioniert es wunderbar
Varianten mit [... _...] etc. habe ich versucht aber komme nicht weiter.

Jemand eine Idee ? Danke schonmal !!!

Jochen

Content-ID: 142234

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

60730
60730 05.05.2010 um 18:30:55 Uhr
Goto Top
Servus,

jetzt nimst du mal deinen Code und postest den innerhalb der dafür vorgesehenen Codeblöcke und dann kann man das auch lesen.

btw: meine Vorliebe für "problembatche, die mit einem führenden echo off anfangen, sollte sich sogar schon in Lampukistan herumgesprochen haben.

Gruß

Ps: Wer es schafft eine Variable set str=%str:~0,%length%% mit einer anderen gleichbenamsten Variable neu zu setzen bekommt eine runde Bier nach Wahl spendiert.....
jknapp
jknapp 05.05.2010 um 20:22:55 Uhr
Goto Top
Hallo TimoBeil,

deinem Wunsch, das ganze in einem Codeblock zu posten, komme ich gerne nach, sorry für das Versäumnis.

Das mit dem Echo off darfst du getrost vergessen, weil lange vor dem "Problemteil" ein Echo on folgt.
Das habe ich nur aus performancegründen gemacht. teste es ohne und du weisst was ich meine ! ;o)

Es gibt auch keine Fehlermeldung, sondern nur nicht das gewünschte Ergebnis.

deinen EInwand mit der gleichbenamten Variable versteh ich leider nicht, denn

set str=%str:~0,22%
geht doch einwandfrei !

Sorry, entweder ich bin zu doof dafür, oder ich bekomm ein Bier von dir ! ;O)
bastla
bastla 05.05.2010 um 20:27:10 Uhr
Goto Top
Hallo jknapp und Timo!

Da ich kein Bier trinke, außer Konkurrenz face-wink (zur Verwendung in einem Batch):
call set "str=%%str:~0,%length%%%"
Grüße
bastla
Biber
Biber 05.05.2010 um 20:52:11 Uhr
Goto Top
Moin jknapp, T-Mo & bastla,

und wenn die DelayedExpansion immer aktiviert ist, geht der proof-of-concept auch als Oneliner am CMD-Prompt.
(=20:50:55  D:\temp=)
>set "BiberStr=MfG Biber" & set "len=4" & Set "BiberStr=!BiberStr:~%len%!" & set BiberStr
BiberStr=Biber

Bier muss auch nicht unbedingt sein, aber wenn, dann bitte ein Becks.

Grüße
Biber
jknapp
jknapp 05.05.2010 um 21:35:20 Uhr
Goto Top
So, danke Ihr !
Bin ja ganz geplättet gleich von mehreren "Administrator.de Promis" supportet zu werden !

Hier nochmal eine etwas laufzeitoptimierte und Fehlerbereinigte Variante, die auch funktioniert.

set str=Verkäufer: Firma Knapp, Jochen Nr.: 86
rem ### Entferne 11 Zeichen von links 
set str=%str:~11% 
rem ### Ermitteln der Länge des Rest-Strings
echo off 
set #=%str% 
set xlang=0 
:loop 
if defined # (set #=%#:~1%&set /A xlang += 1&goto loop) 
echo länge des Strings: %xlang%
echo on 
rem ### Festlegen der Länge des auszuschneidenden Strings von links (xlang minus unerwünschte Zeichen von Rechts)
set /A xlang = %xlang%-9
rem ### Extrahiere "xlang-Zeichen" von links, rest entfällt.  
call set "str=%%str:~0,%xlang%%%"  
rem ### Gebe Ergebnis aus
echo %str% >>Ergebnis.log

...vielleicht kann ja noch jemand was damit anfangen...

jochen
77559
77559 05.05.2010 um 23:00:56 Uhr
Goto Top
Hallo Jochen,
es geht doch, wenn man so schwierige Englische Worte wie length nicht mit lenght verwechselt und etwas deutsch Klingendes verwendet face-wink

Gruß
LotPings
jknapp
jknapp 05.05.2010 um 23:08:57 Uhr
Goto Top
Hallo LotPings,

hast schon nicht unrecht, auch wenn das nicht das eigentliche Problem war, sonder nur eine Unstimmigkeit, die ich nach dem problemlösenden Hinweis von Bastla schnell gelöst habe.

Aber da war wohl der Wunsch Vater des Gedankens, denn wenn es so Funktionen die length, left und right bei Batch-Files gäbe wäre ich in ein paar
Minuten mit der ganzen Sache fertig gewesen. ;O)

Gruß

Jochen