Batchdatei wird für Nicht-Dateielemente in einer Liste nicht in einer Schleife ausgeführt

Batchdatei wird für Nicht-Dateielemente in einer Liste nicht in einer Schleife ausgeführt

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 FORKomma-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 /Fentweder die Handles command, string, oder file-setgemeint, was meiner Meinung nach file-setspeziell 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 delimsnicht tokensanalysieren oder iterieren kann.


Um das Problem zu lösen, platzieren Sie die Nicht-Dateiliste in einem regulärenfürSchleife ohne Verwendung von „ tokensoder“ delimsund 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

Unterstützende Ressourcen

verwandte Informationen