Benötige Erklärung zu einem Batch-Befehl
Guten morgen, ich saß einige Tage an einer Batch-Datei, die nun fertig ist. Mit Hilfe aus dem Internet hatte ich alle Probleme gelöst und bin dabei auf folgenden Code gestoßen:
Dieser Befehl setzt den Parameter "name2" mit dem Wert der Ziffer "num" von "name". Nehmen wir an "name" ist 123456 und "num" ist 3, dann ist "name2" auch 2. Allerdings verstehe ich nicht, was diese hinter dem %num% macht. Kann mir dies jemand erklären?
call set "name2=%%name:~%num%,1%%
Dieser Befehl setzt den Parameter "name2" mit dem Wert der Ziffer "num" von "name". Nehmen wir an "name" ist 123456 und "num" ist 3, dann ist "name2" auch 2. Allerdings verstehe ich nicht, was diese
,1%%
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203008
Url: https://administrator.de/contentid/203008
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
Hi,
Die Zeile extrahiert ein Zeichen des Strings in der Variablen name. Das ~%num% bestimmt die Position ab der extrahiert wird und das ,1 die Länge des Strings der extrahiert werden soll.
Weitere Info dazu findest du hier: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString
Grüße Uwe
Die Zeile extrahiert ein Zeichen des Strings in der Variablen name. Das ~%num% bestimmt die Position ab der extrahiert wird und das ,1 die Länge des Strings der extrahiert werden soll.
Weitere Info dazu findest du hier: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString
Grüße Uwe
das call set wird verwendet wenn du dynamische Variablen innerhalb der Suchen und Ersetzen Funktion verwendest. Das %num% ist ja quasi eine Variable in einer anderen Variable. Der Call-Befehl besitzt die Fähigkeit der doppelten Expansion, so dass das %num% auch aufgelöst wird.
Siehe auch hier.
Siehe auch hier.
Also nochmal zu Fuß:
In einer Batchdatei wird alles was innerhalb einfacher Prozentzeichen steht als Variablenname interpetiert. Wenn jetzt aber noch weitere Prozentzeichen innerhalb der ersten Variable auftauchen werden diese ignoriert bzw. nicht durch deren Inhalt ersetzt, weil DOS ja denkt das es der Name der ersten Variable bzw. ein Sonderzeichen ist. Um dies zu ermöglichen werden die Prozentzeichen am Anfang und am Ende verdoppelt (escaped, weil ein %-Zeichen eben ein Sonderzeichen ist) so das dies dadurch beim Aufruf durch den Call-Befehl jeweils zu einem einzelnen %-Zeichen wird. Dies funktioniert aber nur durch die Möglichkeit des Call-Befehls der eben das Auflösen von Variablen innerhalb einer anderen unterstützt(Doppelte Expansion).
Also beim ersten Scan wird aus
folgendes wenn num = 1:
im zweiten Schritt wird dann der tatsächliche Inhalt in name2 aufgelöst.
z.B. wenn name = ICHBINEINTEXT ist:
Es wird halt immer schrittweise aufgelöst.
Bei Delayed-Expansion wie in meinem vorigen Kommentar geschrieben gilt folgendes:
Erst wird alles innerhalb der Prozenzzeichen umgewandelt, danach alles was innerhalb der Ausrufezeichen steht. Deswegen heißt es delayed(verzögerte) Expansion.
Hoffe das war jetzt verständlich.
http://www.dostips.com/?t=Snippets.Escape
In einer Batchdatei wird alles was innerhalb einfacher Prozentzeichen steht als Variablenname interpetiert. Wenn jetzt aber noch weitere Prozentzeichen innerhalb der ersten Variable auftauchen werden diese ignoriert bzw. nicht durch deren Inhalt ersetzt, weil DOS ja denkt das es der Name der ersten Variable bzw. ein Sonderzeichen ist. Um dies zu ermöglichen werden die Prozentzeichen am Anfang und am Ende verdoppelt (escaped, weil ein %-Zeichen eben ein Sonderzeichen ist) so das dies dadurch beim Aufruf durch den Call-Befehl jeweils zu einem einzelnen %-Zeichen wird. Dies funktioniert aber nur durch die Möglichkeit des Call-Befehls der eben das Auflösen von Variablen innerhalb einer anderen unterstützt(Doppelte Expansion).
Also beim ersten Scan wird aus
call set name2=%%name:~%num%, 10%%
call set name2=%name:~1, 10%
z.B. wenn name = ICHBINEINTEXT ist:
call set name2=CHBINEINTE
Bei Delayed-Expansion wie in meinem vorigen Kommentar geschrieben gilt folgendes:
Erst wird alles innerhalb der Prozenzzeichen umgewandelt, danach alles was innerhalb der Ausrufezeichen steht. Deswegen heißt es delayed(verzögerte) Expansion.
Hoffe das war jetzt verständlich.
http://www.dostips.com/?t=Snippets.Escape