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

FOR-Schleife, Wert-Zuweisung eines SUB-Strings

Frage Entwicklung Batch & Shell

Mitglied: Juergenl

Juergenl (Level 1) - Jetzt verbinden

06.03.2006, aktualisiert 22.11.2006, 11430 Aufrufe, 9 Kommentare

FOR-Schleife, SET-Anweisung, SUB-String

Guten Tag allerseits! (ich bin hier Neuling, - erlaubt mir bitte folgende Anfängerfrage ... )

zum TEST einer FOR-Schleife habe ich mir ein kleines Batchfile geschrieben, welches aus drei Textstrings (xray yest zulu) drei Variable kreieren soll, die jeweils mit dem ANFANGS-Buchstaben des Strings initialisiert werden sollen.

Dabei wollte ich das Substring-Konstrukt '%variable:~n,m%' verwenden. So also meine Befehlszeile in der Batchdatei:

FOR %%i IN (xray,yest,zulu) DO SET %%i_wert=%%i:~0,1%

Danach weist der Befehl 'SET' aber NICHT die angestrebten Ergebniss zu (xray_wert:=x pp), sondern eher die SYNTAX der Substring-Anweisung, also:

xray_wert=xray:~0,1
yest_wert=yest:~0,1
zulu_wert=zulu:~0,1

Nach unzähligen Experimenten mit ALLEM, wovon ich glaubte, es schon verstanden zu haben, frage ich nun lieber die hier versammeltemnExperten: Worin besteht mein Denkfehler?

Danke im Voraus und beste Grüße

Jürgen
<Juergenl>
Mitglied: maneich
07.03.2006 um 02:13 Uhr
Hallo,

in einer Batch in der for-Schleife wird hier i mit %%i aufgerufen, also sollte

%%i:~0,1% eigentlich %%%i:~0,1% sein.

Mit freundlichen Grüßen maneich
Bitte warten ..
Mitglied: Juergenl
07.03.2006 um 07:25 Uhr
Hallo,

in einer Batch in der for-Schleife wird hier
i mit %%i aufgerufen, also sollte

%%i:~0,1% eigentlich %%%i:~0,1% sein.

Mit freundlichen Grüßen maneich

Hallo maneich, danke für Deinen Hinweis!

Leider ändert das zusätzliche '%' aber nichts an dem Effekt, daß NICHT der vorgesehene Wert zugewiesen wird, sondern die Substring-ANWEISUNG. So sieht danach der von der Batch erzeugte Befehl aus:

C:\TEMP>SET xray_wert=%xray:~0,1%

Der Fehlergrund muß also tiefer liegen ...

Beste Grüße

Jürgen
Bitte warten ..
Mitglied: maneich
07.03.2006 um 14:07 Uhr
Hallo,

kann das leider jetzt nicht testen, aber probiere mal folgendes

1. setze vorne und hinten noch %
%%%%i:~0, 1%%

oder

2. über call

FOR %%i IN (xray,yest,zulu) DO call :var %%i

:var
set x=%1
SET %1_wert=%x:~0,1%

Mit freundlichen Grüßen maneich
Bitte warten ..
Mitglied: Biber
07.03.2006 um 14:36 Uhr
Moin JuergenL,

01.
:: -------DelayedDemo.Bat 
02.
@echo off & setlocal enableDelayedExpansion 
03.
set "xray=Alpha" & set "yest=Beta" & set "Zulu=Gamma" 
04.
 
05.
FOR %%i IN (xray,yest,zulu) DO SET "%%i_wert=!%%i:~0,1! 
06.
set x & set y & set z 
07.
:: -------DelayedDemo.Bat
Ergebnis:
01.
xray=Alpha 
02.
xray_wert=A 
03.
yest=Beta 
04.
yest_wert=B 
05.
Zulu=Gamma 
06.
zulu_wert=G
HTH Biber
[Edit] Bullshit...Frage falsch verstanden. siehe unten. [/Edit]
Bitte warten ..
Mitglied: Biber
07.03.2006 um 20:13 Uhr
Sorry, JuergenL,

hatte zu flüchtig gelesen beim ersten Mal und entsprechend viel zu sehr um die Ecke gedacht.

Das Ganze löst also schon ein Oneliner. Aus optischen Gründen auf zwei Zeilen verteilt.

01.
:: -------DelayedDemo.Bat 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
FOR %%i IN (xray,yest,zulu) DO set "tmpvar=%%i" &  set "%%i_wert=!tmpvar:~0,1!" & echo %%i_wert: [!%%i_wert!] 
04.
:: -------DelayedDemo.Bat
Output
01.
>DelayedDemo 
02.
xray_wert: [x] 
03.
yest_wert: [y] 
04.
zulu_wert: [z] 
05.
 
06.
Anmerkung: Da ich bei mir DelayedExpansion als CMD-Standard eingestellt habe, kann ich es sogar über <u>eine</u> CMD-Zeile machen: 
07.
>@FOR %i IN (xray,yest,zulu) DO @set "tv=%i" & @set "%i_wert=!tv:~0,1!" & @echo %i_wert: [!%i_wert!] 
08.
 
09.
xray_wert: [x] 
10.
yest_wert: [y] 
11.
zulu_wert: [z]
Über maneichs Ansatz OHNE DelayedExpansion und mit Sub-Call geht es natürlich auch.
Gruß Biber
Bitte warten ..
Mitglied: Juergenl
08.03.2006 um 10:53 Uhr
Hallo allerseits,

besten Dank für beiderseitige Hilfe, die mir eine Reihe von Aha-Erlebnissen beschert hat. (Da habe ich in meiner Unwissenheit offenbar ein größeres Faß aufgemacht .. gg .. )

Ich habe Eure Batch-Clips ausgeführt: Maneich, Deine zweite Varianten führte (in Varianten) hier auch wieder zur Zuweisung von "Syntax-Elementen", also Tilde, Doppelpunkt pp.

Biber, Deine BEIDEN Demo-Clips tun GENAU DAS, was ich ursprünglich gern erzielt hätte!

Ich bin froh über jeden (!) Hinweis, wie man so etwas macht. Mein Problem besteht allerdings darin, daß ich zur Zeit noch Mühe habe, solch anspruchsvollere Anweisungen Schritt für Schritt nachzuvollziehen und zu verstehen, - d.h. künftig "selber machen zu können".

Das Rüstzeug der DOS-Hilfen allein ist leider etwas sperrig, die einschlägigen Angebote im Netz kranken meist daran, daß sie stereotyp Formulierungen aus jenen Hilfetexten wiederholen: Meist also "Statements", ohne Didaktik zu den Hintergründen.

Ich habe zu diesem anspruchsvolleren Stoff bislang noch kein Tutorial gefunden. ( - die hier im Forum angebotenen habe ich mir natürlich zu Gemüte geführt.) Laßt Ihr mich bitte einmal wissen, ob es dafür ein Standard-Werk gibt, - möglichst in Deutsch.

Auf mein spezielles Zuweisungs-Problem, mit dem ich eigentlich "nur" an einem Uhrzeit-Algorithmus basteln wollte, komme ich später gern noch einmal zurück.

Fürs erste nochmals besten Dank und freundliche Grüße

Jürgen
Bitte warten ..
Mitglied: Biber
08.03.2006 um 18:51 Uhr
Moin Jürgen,

ich gebe Dir Recht.. die Infos zum Thema "DelayedExpansion" sind ein bisschen dürftig.
Wir hatten das neulich mal kurz in dem Beitrag Set /p innerhalb von IF von Kollege yashi.. da wird es vielleicht ein bisschen deutlicher.

Ich habe offen gestanden auch ein bisschen versucht, dieses Thema "DelayedExpansion" ein bisschen flach zu halten - in einem meiner Batch-Tutorials (Tut II mit "NumberMe.bat") habe ich dieses Feature ja verwendet... aber musste auch da mit unerwarteten Seiteneffekten leben. Dieses Feature ist -in sinnvoller Dosierung- durchaus nützlich, aber an einigen Stellen schlicht und einfach buggy implementiert..
Ich werde aber noch zu dem Thema DelayedExpansion noch mal ein paar Zeilen hier als Tutorial posten und dann auch gerne yashis Frage und Dein Beispiel-Problem hier im Beitrag zitieren.

Hatte es bisher nicht so eilig damit, weil ich mir gar nicht sicher war, dass sich auch andere Anwender für dieses Thema interessieren.

Grüße Biber
Bitte warten ..
Mitglied: ahe
22.11.2006 um 17:32 Uhr
Windows 2003 Shell Scripting 2. Aufl.
Armin Hanisch

Addison-Wesley

Gibt einen guten Überblick und liest sich flüssig

Ansonsten ist das Angebot für deutsche Scripting-Literatur entweder auf das Internet beschränkt oder bezieht sich auf VBS/WSH, wobei es dann meist eher was für Entwickler, als für Admins taugt (meist sehr OOP lastig...)

Mit freundlichen Grüßen
Axel
Bitte warten ..
Mitglied: Biber
22.11.2006 um 18:43 Uhr
....hmm,

ich wüsste gar nicht, wie ich für knapp 60 kombinierbare interne und externe CMD-Befehle so einen 320-Seiten-Wälzer zusammenschreiben könnte...
Selbst wenn ich noch ein paar Oneliner einstreue...

Nein, was ich wirklich sagen wollte:
@ahe: Danke für den Link, Axel.

@All: Bei Addison-Wesley gibt es auch eine kurze PDF-Leseprobe zum Download.

Lockerer geschrieben finde ich allerdings die Zeilen auf seiner Homepage.
Extra-Tipp: Download der Dateien zum Buch mit allen Codeschnipseln und ein paar Freeware-Utilities.

...und diesen Beitrag schließe ich jetzt mal.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 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 Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

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

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...