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, 7250 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=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
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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Laufwerksbezeichnung (label) in Batch als Variable nutzen (6)

Frage von tobias.mock zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (1)

Frage von Zendara zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (3)

Frage von tralveller zum Thema Batch & Shell ...

Batch & Shell
gelöst In einer Batch variable die Datei extension ermitteln ? (4)

Frage von Kriegstreiber zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
VPN Tunnel aufbauen (16)

Frage von Hajo2006 zum Thema LAN, WAN, Wireless ...

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (14)

Frage von marshall75000 zum Thema Router & Routing ...

Microsoft Office
Saubere HTML aus Word-Dokument (14)

Frage von peterpa zum Thema Microsoft Office ...

E-Mail
gelöst Probleme beim E-Mail Empfang (12)

Frage von TommyB83 zum Thema E-Mail ...