2010-01-21 12 views

Respuesta

11

Usted ha entendido mal las opciones.

  • tokens=1 significa que solo desea el primer token en cada línea. Quieres todos los tokens en la línea.
  • eol=, significa que desea interpretar una coma como el comienzo de un fin de comentario de línea. Desea utilizar delims=, para indicar que la coma es el delimitador (en lugar del valor predeterminado de espacios en blanco).

FOR/F es principalmente para operar en líneas en un archivo. No estás haciendo eso. Usted está operativo en una sola cadena, por lo que la respuesta de Rubens está más cerca de lo que quiere:

@ECHO OFF 
SET test=1,2,3,4 
FOR /D %%F IN (%test%) DO (
    ECHO . 
    ECHO %%F 
) 

Sin embargo, en teoría, debería ser capaz de decir algo como:

FOR /F "usebackq delims=, tokens=1-4" %%f IN ('1^,2^,3^,4') DO (
    ECHO . 
    ECHO %%f  
    ECHO . 
    ECHO %%g 
    ECHO . 
    ECHO %%h 
    ECHO . 
    ECHO %%i 
) 

Estos trabajos también, pero probablemente no se escale de la manera que desee. Tenga en cuenta que tiene que escapar de la coma en la cadena usando el carácter ^, y debe especificar los tokens que desea y luego usar las variables siguientes% g,% h y% i para obtenerlos.

+0

"Has malentendido las opciones": esto no me sorprende. La documentación que encontré no era tan buena. – jcollum

+0

Pero si le digo que la coma es el final de la línea, ¿no solo quiero el primer token en cada línea? Traté de usar la opción delims también y todavía no obtuve lo que quería. Oh bien. – jcollum

+0

Sí, apesta. PARA /? tiene que leerse con mucho cuidado. Esta es otra fuente: http://technet.microsoft.com/en-us/library/bb490909.aspx –

1

Prueba esto:

set test=1,2,3,4 
for /d %%f IN (%test%) do echo %%f 
+0

Esto funciona. –

+0

Gracias, eso también funciona. – jcollum

0

@OP, y mientras aprende a usar scripts de lotes de DOS, es posible que desee aprender vbscript (o powershell) también. Estas son alternativas y hacen que su secuencia de comandos por lotes sea más fácil, especialmente cuando se trata de tareas más complejas.

Set objFS=CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strInput = objArgs(0) 
s = Split(strInput,",") 
For Each i In s 
WScript.Echo i 
Next 

excepto lo anterior como mysplit.vbs y en la línea de comandos

C:\test>cscript //nologo mysplit.vbs 1,2,3,4 
1 
2 
3 
4 
+0

ambas buenas opciones, pero desafortunadamente requieren aprobación y estamos en una fecha límite; una vez que finalice el plazo, planeo abandonar los archivos de murciélagos con prisa e ir a Nant para esta tarea. – jcollum

Cuestiones relacionadas