![Batchdatei wird für Nicht-Dateielemente in einer Liste nicht in einer Schleife ausgeführt](https://rvso.com/image/1605151/Batchdatei%20wird%20f%C3%BCr%20Nicht-Dateielemente%20in%20einer%20Liste%20nicht%20in%20einer%20Schleife%20ausgef%C3%BChrt.png)
Innerhalb eines erhöhten Befehls unter Windows 10 führe ich diese Batchdatei aus:
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
Ich erwarte, dass alle sechs Elemente aufgelistet werden. Stattdessen wird nur das erste (3D-Objekte) aufgelistet und dann wird gestoppt. Die Verwendung von „Tokens“ scheint keinen großen Unterschied zu machen, und „Delims“ scheint nicht so zu funktionieren, wie ich dachte.
Frage:Liege ich falsch in der Annahme, dass mit FOR
Komma-getrennten Elementen in einer Liste umgegangen werden kann?
Antwort1
Ich glaube nicht, dass es bei einer Nicht-Dateiliste wie erwartet funktioniert, da, wie darin angegeben for /?
, …
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
Ich glaube, damit sind FOR /F
entweder die Handles command
, string
, oder file-set
gemeint, was meiner Meinung nach file-set
speziell eine tatsächliche Datei bedeutet. Wenn dies der Fall ist, bedeutet das, dass die Nicht-Dateiliste dort eingefügt wird. Sie wird als Zeichenfolge interpretiert, die und delims
nicht tokens
analysieren oder iterieren kann.
Um das Problem zu lösen, platzieren Sie die Nicht-Dateiliste in einem regulärenfürSchleife ohne Verwendung von „ tokens
oder“ delims
und achte darauf, dass Werte, die ein Leerzeichen enthalten, in Anführungszeichen gesetzt werden.
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
Sie können alle Werte in Anführungszeichen setzen und die ~
Tilde [ ] im Variablenplatzhalter verwenden, um die Anführungszeichen aus dem Ausgabewert zu extrahieren und so die gewünschte Ausgabe ohne Anführungszeichen zu erhalten.
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
Ausgabe
3D Objects
Documents
Downloads
Music
Pictures
Videos