FOR-Schleife, Wert-Zuweisung eines SUB-Strings
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>
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>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 27493
Url: https://administrator.de/contentid/27493
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Moin JuergenL,
Ergebnis:
HTH Biber
[Edit] Bullshit...Frage falsch verstanden. siehe unten. [/Edit]
:: -------DelayedDemo.Bat
@echo off & setlocal enableDelayedExpansion
set "xray=Alpha" & set "yest=Beta" & set "Zulu=Gamma"
FOR %%i IN (xray,yest,zulu) DO SET "%%i_wert=!%%i:~0,1!
set x & set y & set z
:: -------DelayedDemo.Bat
Ergebnis:
xray=Alpha
xray_wert=A
yest=Beta
yest_wert=B
Zulu=Gamma
zulu_wert=G
[Edit] Bullshit...Frage falsch verstanden. siehe unten. [/Edit]
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.
Output
Über maneichs Ansatz OHNE DelayedExpansion und mit Sub-Call geht es natürlich auch.
Gruß Biber
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.
:: -------DelayedDemo.Bat
@echo off & setlocal EnableDelayedExpansion
FOR %%i IN (xray,yest,zulu) DO set "tmpvar=%%i" & set "%%i_wert=!tmpvar:~0,1!" & echo %%i_wert: [!%%i_wert!]
:: -------DelayedDemo.Bat
>DelayedDemo
xray_wert: [x]
yest_wert: [y]
zulu_wert: [z]
Anmerkung: Da ich bei mir DelayedExpansion als CMD-Standard eingestellt habe, kann ich es sogar über <u>eine</u> CMD-Zeile machen:
>@FOR %i IN (xray,yest,zulu) DO @set "tv=%i" & @set "%i_wert=!tv:~0,1!" & @echo %i_wert: [!%i_wert!]
xray_wert: [x]
yest_wert: [y]
zulu_wert: [z]
Gruß Biber
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
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
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...)
mfg
Axel
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...)
mfg
Axel
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
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