¿Cómo se enlaza un archivo por lotes de Windows?

170

¿Cuál es la sintaxis para un bucle FOR en un archivo por lotes de Windows?

Pradeep
fuente

Respuestas:

128
FOR %%A IN (list) DO command parameters

La lista es una lista de todos los elementos, separados por espacios, comas o punto y coma.

El comando puede ser cualquier comando interno o externo, archivo por lotes o incluso, en OS / 2 y NT, una lista de comandos

Los parámetros contienen los parámetros de la línea de comando para el comando. En este ejemplo, el comando se ejecutará una vez para cada elemento de la lista, utilizando parámetros si se especifica.

Un tipo especial de parámetro (o incluso comando) es %% A, que será sustituido por cada elemento de la lista consecutivamente.

De bucles FOR

rahul
fuente
3
¿Puedo dar el rango (1 a 100) en la lista?
Pradeep
36
FOR /L %x IN (1,1,100) DO ...
Joey
ponga parens alrededor [ parameters ]si desea incluir varias líneas en su forbucle
Frank Bryce
1
@aaiezza, secundo tu opinión. Estoy luchando con estos bucles sangrientos en este momento, trabajando de manera completamente inesperada, y no tengo idea de qué está controlando nada mirando la salida. Cosas horribles. Útil, pero horrible.
RockDoctor
224

Si quieres hacer algo x veces, puedes hacer esto:

Ejemplo (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 medio:

  • Inicio = 1
  • Incremento por paso = 1
  • Fin = 200
vancoeverden
fuente
17
Gracias por añadir. Podría ser más claro si cambia el valor inicial en su ejemplo a algo diferente al incremento.
Warren Stevens
77
El valor final es inclusivo.
Roland Pihlakas
54

Tipo:

for /?

y obtendrá varias páginas de texto de ayuda.

Greg Hewgill
fuente
8
Prefiero esto sobre la respuesta aceptada porque maneja las diferentes versiones de DOS / Windows. "For" se ha mejorado significativamente a lo largo de los años, y la pregunta no dice qué versión (s) está (n) siendo objetivo ni qué escenario se está intentando.
Mattias Andersson
34

Condicionalmente ejecutar un comando varias veces.

  • sintaxis-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • sintaxis-FOR-Files-Rooted en la ruta

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • sintaxis-PARA-Carpetas

    FOR /D %%parameter IN (folder_set) DO command 
    
  • sintaxis-PARA-Lista de números

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • sintaxis-para-contenido del archivo

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    o

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • Resultados de sintaxis-FOR-Command

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

Eso

  • Tomar un conjunto de datos
  • Hacer un parámetro FOR %%Gigual a alguna parte de esos datos
  • Ejecute un comando (opcionalmente usando el parámetro como parte del comando).
  • -> Repita para cada elemento de datos

Si está utilizando el comando FOR en la línea de comandos en lugar de en un programa por lotes, use solo un signo de porcentaje: en %Glugar de %%G.

Para los parámetros

  • El primer parámetro debe definirse utilizando un solo carácter, por ejemplo, la letra G.

  • FOR %%G IN ...

    En cada iteración de un bucle FOR, la IN ( ....)cláusula se evalúa y se %%Gestablece en un valor diferente

    Si esta cláusula da como resultado un valor único, %% G se establece igual a ese valor y se ejecuta el comando.

    Si la cláusula da como resultado valores múltiples, los parámetros adicionales se definen implícitamente para contener cada uno. Estos se asignan automáticamente en orden alfabético %%H %%I %%J... (definición implícita de parámetros)

    Si el parámetro hace referencia a un archivo, se puede utilizar la referencia de variable mejorada para extraer el nombre de archivo / ruta / fecha / tamaño.

    Por supuesto, puede elegir cualquier letra del alfabeto que no sea %%G. pero es una buena opción porque no entra en conflicto con ninguna de las letras de formato de nombre de ruta (a, d, f, n, p, s, t, x) y proporciona la ejecución más larga de letras no conflictivas para usar como parámetros implícitos .

J. Chomel
fuente
1
¿Cómo uso for loop para entrar dentro de una variable previamente establecida? Traté de / F "tokens = 2 delims =," %% i en (% a%) do (... .. pero esto no funciona. No dice "(fue inesperado en este momento"
Shivani
Hola. ¿Está %a%dando el nombre de un archivo normal? Es difícil ayudarte con este formato. Siéntase libre de hacer una nueva pregunta después de leer Cómo preguntar .
J. Chomel
2
@jumping_monkey, el comando FOR crea variables de parámetros que se identifican con una letra en lugar de un número (por ejemplo, %% G). El formato de ruta de expansión de parámetros también se puede aplicar a estos. Para evitar confusiones entre los dos conjuntos de letras, evite usar las letras (a, d, f, n, p, s, t, x, z) como parámetros FOR o simplemente elija una letra de parámetro FOR que sea MAYÚSCULA.
J. Chomel
Hola @ J.Chomel, Entendido So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(aquí) [ ss64.com/nt/syntax-args.html ), gracias a ti. Salud.
jumping_monkey
15

FOR le dará cualquier información que necesite saber sobre los bucles FOR, incluidos ejemplos sobre el uso adecuado.

Mechaflash
fuente
13

Prueba este código:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1es el número que se incrementará y num2es el valor agregado num1y terminador es el valor donde num1terminará. Puede indicar un valor diferente para el terminador en esta declaración ( if %num1%==%terminator% goto close). Esta es la expresión booleana goto close es el proceso si el boolean es verdadero y goto open es el proceso si el booleano es falso.

Marlon Ampoon
fuente
Esto es lo más fácil de entender. Las otras respuestas dan casi ninguna explicación sobre lo que hacen los comandos y las banderas. Para un tipo único de JavaScript, los archivos por lotes no son intuitivos en absoluto.
1934286
5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit
Rendell tanyag
fuente
5

Del FOR /?documento de ayuda:

FOR% variable IN (set) DO comando [parámetros del comando]

% variable Especifica un parámetro reemplazable de una sola letra.
(conjunto) Especifica un conjunto de uno o más archivos. Se pueden usar comodines. comando Especifica el comando a ejecutar para cada archivo.
parámetros de comando
Especifica parámetros o modificadores para el comando especificado.

Para usar el comando FOR en un programa por lotes, especifique %% variable en lugar
de% variable. Los nombres de las variables distinguen entre mayúsculas y minúsculas, por lo que% i es diferente
de% I.

Si las Extensiones de comando están habilitadas,
se admiten las siguientes formas adicionales del comando FOR:

FOR / D% variable IN (set) DO comando [parámetros del comando]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[unidad:] ruta]% variable IN (conjunto) DO comando [parámetros del comando]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L% variable IN (inicio, paso, fin) Comando DO [parámetros del comando]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
Kangaroo.H
fuente