Dentro de um comando elevado usando o Windows 10, executo este arquivo em lote:
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
Espero que ele liste cada um desses seis itens. Em vez disso, ele lista apenas o primeiro (Objetos 3D) e depois para. Usar "Tokens" não parece fazer muita diferença, e "delims" não parece estar funcionando como eu esperava.
Pergunta:Estou enganado ao pensar que isso FOR
pode lidar com itens delimitados por vírgulas em uma lista?
Responder1
Não acho que esteja funcionando como você espera para uma lista que não seja de arquivos, porque conforme indicado em 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]
Acredito que isso significa os FOR /F
identificadores command
, string
, ou file-set
que presumo que file-set
signifiquem especificamente um arquivo real. Se for esse o caso, isso significa colocar a lista de não-arquivos lá, ela é interpretada como uma string que delims
não tokens
pode ser analisada ou iterada.
Para resolver coloque a lista de não-arquivos dentro de um regularparafaça um loop sem usar nenhum tokens
ou delims
e garanta que os valores que contêm um espaço sejam colocados entre aspas duplas.
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
Você pode colocar aspas duplas em torno de todos os valores e usar o ~
til [] no espaço reservado da variável para analisar as aspas duplas do valor de saída, fornecendo a saída desejada sem aspas duplas.
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
Saída
3D Objects
Documents
Downloads
Music
Pictures
Videos