HowTo For Schleife mit TokenTrenner AnführungsZeichen ( double quotes as Delimiter )
Wie heisen die Dinger noch gleich? - doppelte Hochkommata; Gänsefüsschen oder doppelte Anführungszeichen.
Es gibt sicher noch ein paar Varianten dieses Zeichen " zu benennen.
Moin Admins,
Die AnführungsZeichen innerhalb einer Variable "Zeichen"Kette" mussten Vorerst mit dem Befehl Set separiert werden.
In Anlehnung an das Tutorial zur For Schleife
Für den Inhalt von Dateien macht sich aber der Tokentrenner delims= in der For-Schleife etwas einfacher.
Das AnführungsZeichen in einer Forschleife lässt sich mithilfe des Caret (Zirkumflex) Escapen als delimiter einsetzen.
Paradoxerweise müssen dafür um die
In der BefehlszeilenReferenz For geht es um
Ich Verwende den Begriff
Bei einer Regulären Forschleife werden die AnführungsZeichen um die
Das Gleichheitszeichen = ist schon der erste Grund dafür.
Dieser Umstand macht die Nutzung des Caret zur Maskierung (als Escape-Funtion) des Nächsten Zeichens unmöglich.
nicht zu vergessen sind auch Befehls- und Verkettungszeichen
und zuletzt nicht Auszulassen das doppelte AnführungsZeichen
Da jetzt die AnführungsZeichen um die
Das Leerzeichen und auch der Tab wird eh nur in den Delimiter aufgenommen wenn delims als letztes in den
Nur das Leerzeichen muss als letzter Delimeter angegeben werden.
Wenn delims dann NICHT als letztes in den
so werden Beide Varianten gleich Funktionieren
für Variablen mit einer ungeraden Anzahl von AnführungsZeichen empfiehlt es sich immer die Verzögerte Auflösung der Variable zu Verwenden
in einer Batch
die Ausgabe der CMD
Dazu möchte ich noch sagen, das eine in ProzentZeichen Angezeigte Variable mit enthaltenen SonderZeichen und enthaltenen Anführungszeichen die BefehlsZeile komplett Durcheinanderbringen kann.
[Edit]
leicht Überarbeitet - hoffe nicht zu lang geworden
[/Edit]
Gruß Phil
Es gibt sicher noch ein paar Varianten dieses Zeichen " zu benennen.
Moin Admins,
Die AnführungsZeichen innerhalb einer Variable "Zeichen"Kette" mussten Vorerst mit dem Befehl Set separiert werden.
set "Variable=%Variable:"=%"
In Anlehnung an das Tutorial zur For Schleife
Für den Inhalt von Dateien macht sich aber der Tokentrenner delims= in der For-Schleife etwas einfacher.
Das AnführungsZeichen in einer Forschleife lässt sich mithilfe des Caret (Zirkumflex) Escapen als delimiter einsetzen.
Paradoxerweise müssen dafür um die
Optionen
der For /f - Schleife die doppelten Anführungszeichen weggelassen werden.In der BefehlszeilenReferenz For geht es um
Analyseschlüsselwörter
.Ich Verwende den Begriff
Optionen
wie im For Tutorial und in der CMD-Hilfe Help ForFOR /F "Optionen" %Variable IN (Ausdruck) DO Befehl [Parameter]
Bei einer Regulären Forschleife werden die AnführungsZeichen um die
Optionen
gesetzt, welche wiederum nur Notwendig sind, weil im For-Befehl Sonderzeichen enthalten sind.Das Gleichheitszeichen = ist schon der erste Grund dafür.
Dieser Umstand macht die Nutzung des Caret zur Maskierung (als Escape-Funtion) des Nächsten Zeichens unmöglich.
Sehen wir nun erstmal was für SonderZeichen eine Sonderbehandlung benötigen.
In der CMD Hilfe CMD /? ist eine SonderZeichenbehandlung angegeben.Die folgenden Sonderzeichen erfordern Anführungszeichen:
<Leerzeichen>
(){}^=;!'+,`~
& > < |
"
Optionen
fehlen müssen diese SonderZeichen "Escaped" werden.FOR /F Optionen %Variable IN (Ausdruck) DO Befehl [Parameter]
Beispiele am Promt
>for /f usebackq %i in ("D:\Help\abc.txt") do @echo %i
diese
dieser
"
diese"Zeile"ist"mit"AnfuerungsZeichen"zwischen"Den"Worten
>for /f usebackq^ delims^= %i in ("D:\Help\abc.txt") do @echo %i
diese Zeile enthaelt kein AnfuerungsZeichen
dieser Text enthaelt hier ->" ein Anfuerungszeichen
" dieser Text beginnt mit einem AnfuerungsZeichen
diese"Zeile"ist"mit"AnfuerungsZeichen"zwischen"Den"Worten
>for /f usebackq^ delims^=^" %i in ("D:\Help\abc.txt") do @echo %i
diese Zeile enthaelt kein AnfuerungsZeichen
dieser Text enthaelt hier ->
dieser Text beginnt mit einem AnfuerungsZeichen
diese
>for /f eol^=^"^ usebackq^ delims^= %i in ("D:\Help\abc.txt") do @echo %i
diese Zeile enthaelt kein AnfuerungsZeichen
dieser Text enthaelt hier ->" ein Anfuerungszeichen
diese"Zeile"ist"mit"AnfuerungsZeichen"zwischen"Den"Worten
>for /f usebackq^ delims^=^"^ tokens^=1-8 %i in ("D:\Help\abc.txt") do @echo %i-%j-%k-%l-%m-%n-%o-%p
diese Zeile enthaelt kein AnfuerungsZeichen-------
dieser Text enthaelt hier ->- ein Anfuerungszeichen------
dieser Text beginnt mit einem AnfuerungsZeichen-------
diese-Zeile-ist-mit-AnfuerungsZeichen-zwischen-Den-Worten
Mir ist bewusst, dass die
Die Frage nach dem "Warum Normal zuletzt" ist leicht beantwortet:Option
delims im täglichen Umgang mit Forschleifen als letztes in den Optionen
aufgeführt wird.Das Leerzeichen und auch der Tab wird eh nur in den Delimiter aufgenommen wenn delims als letztes in den
Optionen
auftaucht.Nur das Leerzeichen muss als letzter Delimeter angegeben werden.
Wenn delims dann NICHT als letztes in den
Optionen
genommen wird möchte man Kein LeerZeichen oder TAB als Trenner haben.so werden Beide Varianten gleich Funktionieren
>for /f delims^=^"^ ^ ^ ^ tokens^=2 %i in ("aa"bb "cc dd") do @echo :%i:
:bb :
>for /f tokens^=2delims^=^" %i in ("aa"bb "cc dd") do @echo :%i:
:bb :
für Variablen mit einer ungeraden Anzahl von AnführungsZeichen empfiehlt es sich immer die Verzögerte Auflösung der Variable zu Verwenden
in einer Batch
@echo off&setlocal
set "Test=abc " 1 ! 2 " def ^" ghi"
setlocal enabledelayedexpansion
echo Test voll: !Test!
for /f eol^=^"^ delims^=^"^!^ tokens^=2^,3-4 %%i in ("!Test!") do endlocal & echo\Test aus der For: %%i.%%j.%%k
pause
Test voll: abc " 1 ! 2 " def ^" ghi
Test aus der For: 1 . 2 . def ^
Drücken Sie eine beliebige Taste . . . _
Dazu möchte ich noch sagen, das eine in ProzentZeichen Angezeigte Variable mit enthaltenen SonderZeichen und enthaltenen Anführungszeichen die BefehlsZeile komplett Durcheinanderbringen kann.
@echo off&setlocal
set "Test=abc " 1 ! 2 " def ^" ghi"
echo Test voll: %Test%
for /f eol^=^"^ delims^=^"^!^ tokens^=2^,3-4 %%i in ("%Test%") do endlocal & echo\Test aus der For: %%i.%%j.%%k
pause
[Edit]
leicht Überarbeitet - hoffe nicht zu lang geworden
[/Edit]
Gruß Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 172844
Url: https://administrator.de/contentid/172844
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
9 Kommentare
Neuester Kommentar
Wie heisen die Dinger noch gleich? - doppelte Hochkommata; Gänsefüsschen oder doppelte Anführungszeichen.
Es gibt sicher noch ein paar Varianten dieses Zeichen " zu benennen.
Es gibt sicher noch ein paar Varianten dieses Zeichen " zu benennen.
http://de.wikipedia.org/wiki/Satzzeichen
http://www.duden.de/rechtschreibregeln/anfuehrungszeichen
Moin pieh-ejdsch,
wäre es, wenn die Anführungszeichen als Delimiter zwischen mehreren Token dienen sollen,
nicht angebrachter, die FOR-Anweisung so zu formulieren?
Die Textdatei "textmitAnfü.txt" sieht so aus:
Oder - anders ausgedrückt - mit der Caret/dem Zirkumflex ^ ein Anführungszeichen innerhalb der FOR-Anweisung zu maskieren mag ja eine notwendige Bedingung sein.
Aber für die Nutzbarkeit als delimiter ist es nicht hinreichend.
Grüße
Biber
[Edit & OT]
Ich denke, Kaputtnick hatte sich nur an den doppelten Anführungszeichen gestört.
Weil.... du bekommst auch keine anderen, wenn du im Laden nach einfachen handelsüblichen Anführungszeichen fragst.
[/Edit & OT]
wäre es, wenn die Anführungszeichen als Delimiter zwischen mehreren Token dienen sollen,
nicht angebrachter, die FOR-Anweisung so zu formulieren?
>for /f usebackq^ tokens^=1-6^ delims^=^" %i in ("e:\schnipsel\textmitAnfü.txt") do @echo i[%i] j[%j] k[%k] l[%l] m[%m] n[%n]
i[diese Zeile enth§lt kein AnfuerungsZeichen] j k l m n
i[dieser Text enthaelt hier ->] j[ ein Anfuerungszeichen] k l m n
i[diese] j[Zeile] k[ist] l[mit] m[AnfuerungsZeichen] n[zwischen]
Die Textdatei "textmitAnfü.txt" sieht so aus:
diese Zeile enthõlt kein AnfuerungsZeichen
dieser Text enthaelt hier ->" ein Anfuerungszeichen
diese"Zeile"ist"mit"AnfuerungsZeichen"zwischen"Den"Worten
Oder - anders ausgedrückt - mit der Caret/dem Zirkumflex ^ ein Anführungszeichen innerhalb der FOR-Anweisung zu maskieren mag ja eine notwendige Bedingung sein.
Aber für die Nutzbarkeit als delimiter ist es nicht hinreichend.
Grüße
Biber
[Edit & OT]
in dem Sinne ist es kein Satzzeichen, sondern Korrekterweise ist es nur ein "Zollzeichen".
...in diesem Forum bestimmt auch bald als "hochgestellte römische Zwei" bezeichnet, weil es sonst zu einfach wird.Ich denke, Kaputtnick hatte sich nur an den doppelten Anführungszeichen gestört.
Weil.... du bekommst auch keine anderen, wenn du im Laden nach einfachen handelsüblichen Anführungszeichen fragst.
[/Edit & OT]
Moin pieh-ejdsch,
schön, dass Du das herausgefunden und veröffentlicht hast. Dieser Tipp wird in meinem FOR-Tutorial verlinkt .
Zur Bezeichnung des "-Zeichens: Ich denke, man sollte sich da einfach an den allgemeinen Sprachgebrauch halten. Die Ausdrücke "doppeltes Anführungszeichen" (für das "-Zeichen), "einfaches Anführungszeichen" (für das '-Zeichen, was eigentlich Apostroph heißt) und "umgekehrtes Anführungszeichen" (für das `-Zeichen, was eigentlich Gravis oder frz. accent grave heißt) stammt ja schließlich von den Übersetzern der Hilfetexte der Redmonder Praktikanten, die wahrscheinlich ebenfalls Praktikanten waren ... Diese sprachlichen Ver(w)irrungen noch fortzusetzen und den Begriff "Zollzeichen" ins Spiel zu bringen, halte ich für keine gute Idee. Und laut dem Wikipedia-Artikel ist das "-Zeichen ein Satzzeichen.
Gruß
Friemler
schön, dass Du das herausgefunden und veröffentlicht hast. Dieser Tipp wird in meinem FOR-Tutorial verlinkt .
Zur Bezeichnung des "-Zeichens: Ich denke, man sollte sich da einfach an den allgemeinen Sprachgebrauch halten. Die Ausdrücke "doppeltes Anführungszeichen" (für das "-Zeichen), "einfaches Anführungszeichen" (für das '-Zeichen, was eigentlich Apostroph heißt) und "umgekehrtes Anführungszeichen" (für das `-Zeichen, was eigentlich Gravis oder frz. accent grave heißt) stammt ja schließlich von den Übersetzern der Hilfetexte der Redmonder Praktikanten, die wahrscheinlich ebenfalls Praktikanten waren ... Diese sprachlichen Ver(w)irrungen noch fortzusetzen und den Begriff "Zollzeichen" ins Spiel zu bringen, halte ich für keine gute Idee. Und laut dem Wikipedia-Artikel ist das "-Zeichen ein Satzzeichen.
Gruß
Friemler
Aloha Friemler,
[OT]
und nur weil's beiFWikipedia steht ...
Ich persönlich bleibe bei Zollzeichen, weil ich „Anführungszeichen” weder aus dem ASCII heraus noch sonstwie schreibmaschinentechnisch im heutigen Zeitalter akzeptiere [auch wenn viele Forensoftware sowohl für “ (ALT+0147) als auch für ” (ALT+0148) oftmals nur " darstellen oder die Darstellung sogar vertauschen *gg*]
[/OT]
@phil,
hättest du den Beitrag nicht vor zwei Wochen bringen können ... ich hab mir den ... ausgebissen, Zollzeichen als Delimiter zu nutzen, auf die Idee, die Optionen zu maskieren wäre ich dort nicht gekommen.
greetz André
edit: Weshalb funktioniert das eigentlich nicht mit
P.S.:@Phil, wenn dann bitte Skye
[OT]
und nur weil's bei
Ich persönlich bleibe bei Zollzeichen, weil ich „Anführungszeichen” weder aus dem ASCII heraus noch sonstwie schreibmaschinentechnisch im heutigen Zeitalter akzeptiere [auch wenn viele Forensoftware sowohl für “ (ALT+0147) als auch für ” (ALT+0148) oftmals nur " darstellen oder die Darstellung sogar vertauschen *gg*]
[/OT]
@phil,
hättest du den Beitrag nicht vor zwei Wochen bringen können ... ich hab mir den ... ausgebissen, Zollzeichen als Delimiter zu nutzen, auf die Idee, die Optionen zu maskieren wäre ich dort nicht gekommen.
greetz André
edit: Weshalb funktioniert das eigentlich nicht mit
in ('echo Eins"Zwei"Drei"etc')
?P.S.:@Phil, wenn dann bitte Skye
@pieh-ejdsch
Ich bin begeistert, nachdem eigentlich niemand mehr geglaubt hat, dass es möglich ist quotes als delim zu verwenden, ist es doch noch gelungen.
Und dann auf eine so relativ einfache Weise, nur dass es vorher nie jemand ausprobiert hat.
Ich hab auch so ziemlich alles probiert, aber auf die Idee die umschliessenden quotes wegzulassen bin ich einfach nicht gekomment.
Jan Erik
Ich bin begeistert, nachdem eigentlich niemand mehr geglaubt hat, dass es möglich ist quotes als delim zu verwenden, ist es doch noch gelungen.
Und dann auf eine so relativ einfache Weise, nur dass es vorher nie jemand ausprobiert hat.
Ich hab auch so ziemlich alles probiert, aber auf die Idee die umschliessenden quotes wegzulassen bin ich einfach nicht gekomment.
Jan Erik