Dentro de un comando elevado usando Windows 10, ejecuto este archivo por lotes:
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
Espero que enumere cada uno de esos seis elementos. En cambio, enumera solo el primero (Objetos 3D) y luego se detiene. El uso de "Tokens" no parece hacer mucha diferencia y los "delims" no parecen funcionar como pensaba.
Pregunta:¿Me equivoco al pensar que FOR
se pueden manejar elementos delimitados por comas en una lista?
Respuesta1
No creo que esté funcionando como se espera para una lista que no es de archivos porque, como se indica en 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]
Creo que esto significa los FOR /F
identificadores command
, string
o file-set
supongo que file-set
significa específicamente un archivo real. Si este es el caso, entonces eso significa poner la lista que no es de archivos allí, se interpreta como una cadena que y delims
no tokens
puede analizar ni iterar.
Para resolverlo, coloque la lista que no es de archivos dentro de un archivo normal.parabucle sin utilizar ningún tokens
o delims
y asegúrese de que los valores que contienen un espacio estén entre comillas dobles.
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
Puede poner comillas dobles alrededor de todos los valores y usar la ~
tilde [] en el marcador de posición de la variable para analizar las comillas dobles del valor de salida y obtener el resultado deseado sin comillas dobles.
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
Producción
3D Objects
Documents
Downloads
Music
Pictures
Videos