Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch, verschachtelte Variable

Frage Entwicklung Batch & Shell

Mitglied: jknapp

jknapp (Level 1) - Jetzt verbinden

05.05.2010, aktualisiert 19:54 Uhr, 7107 Aufrufe, 7 Kommentare

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 geht einfach ned...


Hier mein Code, der nicht funktioniert:

01.
rem ##Teil 1, funktiniert soweit gut... ## 
02.
echo off 
03.
set str=Verkäufer: Firma Mustermann, John Nr.: 86 
04.
set #=%str% 
05.
set length=0 
06.
:loop 
07.
if defined # (set #=%#:~1%&set /A length += 1&goto loop) 
08.
echo %length% 
09.
echo on 
10.
 
11.
rem ##Teil 2, funktiniert auch... ## 
12.
set /A lenght = %length%-(8+11) 
13.
echo %lenght% 
14.
pause 
15.
 
16.
rem ##Teil3, funktioniert...## 
17.
set str=%str:~11% 
18.
echo %str% 
19.
pause 
20.
 
21.
rem ## Und hier komm ich ned weiter, vorher ergibt das echo von %str% ein  "Firma Mustermann, John Nr.: 86", wie gewünscht. 
22.
set str=%str:~0,%length%%  
23.
 
24.
echo Dateiname:%str% 
25.
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
Mitglied: 60730
05.05.2010 um 18:30 Uhr
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.....
Bitte warten ..
Mitglied: jknapp
05.05.2010 um 20:22 Uhr
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

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

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

Da ich kein Bier trinke, außer Konkurrenz (zur Verwendung in einem Batch):
call set "str=%%str:~0,%length%%%"
Grüße
bastla
Bitte warten ..
Mitglied: Biber
05.05.2010 um 20:52 Uhr
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=Mit freundlichen Grüßen 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
Bitte warten ..
Mitglied: jknapp
05.05.2010 um 21:35 Uhr
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.

01.
set str=Verkäufer: Firma Knapp, Jochen Nr.: 86 
02.
rem ### Entferne 11 Zeichen von links  
03.
set str=%str:~11%  
04.
rem ### Ermitteln der Länge des Rest-Strings 
05.
echo off  
06.
set #=%str%  
07.
set xlang=0  
08.
:loop  
09.
if defined # (set #=%#:~1%&set /A xlang += 1&goto loop)  
10.
echo länge des Strings: %xlang% 
11.
echo on  
12.
rem ### Festlegen der Länge des auszuschneidenden Strings von links (xlang minus unerwünschte Zeichen von Rechts) 
13.
set /A xlang = %xlang%-9 
14.
rem ### Extrahiere "xlang-Zeichen" von links, rest entfällt. 
15.
call set "str=%%str:~0,%xlang%%%" 
16.
rem ### Gebe Ergebnis aus 
17.
echo %str% >>Ergebnis.log
...vielleicht kann ja noch jemand was damit anfangen...

jochen
Bitte warten ..
Mitglied: LotPings
05.05.2010 um 23:00 Uhr
Hallo Jochen,
es geht doch, wenn man so schwierige Englische Worte wie length nicht mit lenght verwechselt und etwas deutsch Klingendes verwendet

Gruß
LotPings
Bitte warten ..
Mitglied: jknapp
05.05.2010 um 23:08 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...