para

Ejecuta un comando especificado para cada archivo, dentro de un conjunto de archivos.

Sintaxis

for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]

Parámetros

Parámetro Descripción
{%% \| %}<variable> Necesario. Representa un parámetro reemplazable. Use un signo de un solo porcentaje (%) para ejecutar el comando for en el símbolo del sistema. Use signos de porcentaje doble (%%) para ejecutar el comando for dentro de un archivo por lotes. Las variables distinguen entre mayúsculas y minúsculas, y deben representarse con un valor alfabético, como %a, %b o %c.
(<set>) Necesario. Especifica uno o varios archivos, directorios o cadenas de texto, o un intervalo de valores en los que se va a ejecutar el comando. Es obligatorio utilizar paréntesis.
<command> Necesario. Especifica el comando que desea ejecutar en cada archivo, directorio o cadena de texto, o en el intervalo de valores incluidos en el conjunto.
<commandlineoptions> Especifica las opciones de línea de comandos que quiera usar con el comando especificado.
/? Muestra la ayuda en el símbolo del sistema.

Comentarios

  • Puede usar este comando en un archivo por lotes o directamente desde el símbolo del sistema.

  • Los atributos siguientes se aplican al comando for:

    • Este comando reemplaza % variable o %% variable por cada cadena de texto del conjunto especificado hasta que dicho comando procesa todos los archivos.

    • Los nombres de variable distinguen mayúsculas de minúsculas, son globales y no puede haber más de 52 activos a la vez.

    • Para evitar confusiones con los parámetros de lote, %0 a %9, puede usar cualquier carácter para la variable, excepto los números del 0 al 9. En el caso de los archivos por lotes simples, un solo carácter como %%f funcionará.

    • Puede usar varios valores para variable en archivos por lotes complejos para distinguir distintas variables reemplazables.

  • El parámetro set puede representar un único grupo de archivos o varios grupos de archivos. Puede usar caracteres comodín (* y ?) para especificar un conjunto de archivos. A continuación, observe algunos conjuntos de archivos válidos:

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • Cuando se usa este comando, el primer valor en set reemplaza % variable o %% variable y, a continuación, el comando especificado procesa este valor. Este proceso continúa hasta que se procesan todos los archivos (o grupos de archivos) que corresponden al valor set.

  • In y do no son parámetros, pero debe usarlos con este comando. Si omite cualquiera de estas palabras clave, aparecerá un mensaje de error.

  • Si las extensiones de comandos están habilitadas (es decir, el valor predeterminado), se admiten las siguientes formas adicionales de for:

    • Solo directorios: si set contiene caracteres comodín (* o ?), el comando especificado se ejecuta para cada directorio (en lugar de un conjunto de archivos en un directorio especificado) que coincide con set. La sintaxis es:

      for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      
    • Recursivo: recorre el árbol de directorios que se basa en drive:path y ejecuta la instrucción for en cada directorio del árbol. Si no se especifica ningún directorio después de /r, el directorio actual se usa como directorio raíz. Si set es solo un punto (.), solo enumera el árbol de directorios. La sintaxis es:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      
    • Iteración de un intervalo de valores: use una variable iterativa para establecer el valor inicial (start#) y, a continuación, recorra un intervalo de valores establecido hasta que el valor supere el valor final establecido (end#). /l ejecuta el iterativo comparando start# con end#. Si start# es menor que end# se ejecutará el comando. Cuando la variable iterativa supera end#, el shell de comandos sale del bucle. También puede usar un step# negativo para recorrer un intervalo en valores decrecientes. Por ejemplo, (1,1,5) genera la secuencia 1 2 3 4 5 y (5,-1,1) genera la secuencia 5 4 3 2 1. La sintaxis es:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]
      
    • Iteración y análisis de archivos: use el análisis de archivos para procesar la salida de comandos, las cadenas y el contenido del archivo. Use variables iterativas para definir el contenido o las cadenas que desea examinar y use las distintas opciones parsingkeywords para seguir modificando el análisis. Use la opción de token parsingkeywords para especificar qué tokens se deben pasar como variables iterativas. Cuando se usa sin la opción de token, /f solo examinará el primer token.

      El análisis de archivos consiste en leer la salida, la cadena o el contenido del archivo y, a continuación, dividirlo en líneas individuales de texto y analizar cada línea en cero tokens o más. A continuación, se llama al bucle for con el valor de variable iterativo establecido en el token. De forma predeterminada, /f pasa el primer token separado por espacios de cada línea de cada archivo. Las líneas en blanco se omiten.

      Las sintaxis son las siguientes:

      for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlinepptions>]
      

      El argumento set especifica uno o varios nombres de archivo. Cada archivo se abre, lee y procesa antes de pasar al siguiente archivo del conjunto. Para invalidar el comportamiento de análisis predeterminado, especifique parsingkeywords. Se trata de una cadena entre comillas que contiene una o varias palabras clave para especificar diferentes opciones de análisis.

      Si usa la opción usebackq, use una de las sintaxis siguientes:

      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<Set>) do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<LiteralString>') do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlinepptions>]
      

      En la tabla siguiente se enumeran las palabras clave de análisis que puede usar para parsingkeywords.

      Palabra clave Descripción
      eol=<c> Especifica un carácter de final de línea (solo un carácter).
      skip=<n> Especifica el número de líneas que se omitirán al principio del archivo.
      delims=<xxx> Especifica un conjunto de delimitadores. Esto reemplaza el conjunto de delimitadores predeterminado de espacio y pestaña.
      tokens=<x,y,m–n> Especifica qué tokens de cada línea se van a pasar al bucle for en cada iteración. Como resultado, se asignan nombres de variable adicionales. m-n especifica un intervalo, desde el m hasta el n. Si el último carácter de la cadena tokens= es un asterisco (*), se asigna una variable adicional y recibe el texto restante en la línea después del último token que se analiza.
      usebackq Especifica que se ejecute una cadena entre comillas inversas como comando, que se use una cadena entre comillas simples como cadena literal, o bien, para nombres de archivo largos que contengan espacios, que se permita que los nombres de archivo en <set> se incluyan entre comillas dobles.
    • Sustitución de variables: en la tabla siguiente se muestra la sintaxis opcional (para cualquier variable I):

      Variable con modificador Descripción
      %~I Expande %I, que quita las comillas que haya alrededor.
      %~fI Expande %I a un nombre de ruta de acceso completo.
      %~dI Expande %I a una letra de unidad solamente.
      %~pI Expande %I a una ruta de acceso solamente.
      %~nI Expande %I a un nombre de archivo solamente.
      %~xI Expande %I a una extensión de nombre de archivo solamente.
      %~sI Expande la ruta de acceso para contener solo nombres cortos.
      %~aI Expande %I a los atributos de archivo del archivo.
      %~tI Expande %I a la fecha y hora del archivo.
      %~zI Expande %I al tamaño del archivo.
      %~$PATH:I Busca en los directorios enumerados en la variable de entorno PATH y expande %I al nombre completo del primer directorio encontrado. Si el nombre de la variable de entorno no está definido o la búsqueda no encuentra el archivo, este modificador se expande a la cadena vacía.

      En la tabla siguiente se enumeran las combinaciones de modificadores que puede usar para obtener resultados compuestos.

      Variable con modificadores combinados Descripción
      %~dpI Expande %I a una letra de unidad y una ruta de acceso solamente.
      %~nxI Expande %I a una extensión y nombre de archivo solamente.
      %~fsI Expande %I a un nombre de ruta de acceso completo con nombres cortos solamente.
      %~dp$PATH:I Busca en los directorios que aparecen en la variable de entorno PATH para %I y se expande a la letra de unidad y la ruta de acceso de la primera que encuentra.
      %~ftzaI Expande %I a una línea de salida similar a dir.

      En los ejemplos anteriores, puede reemplazar %I y PATH por otros valores válidos. Un nombre de variable for válido cierra la sintaxis %~.

      Mediante el uso de nombres de variable en mayúsculas como %I, puede hacer que el código sea más legible y evitar confusiones con los modificadores, que no distinguen entre mayúsculas y minúsculas.

  • Análisis de una cadena: puede usar la lógica de análisis for /f en una cadena inmediata encapsulando <literalstring> entre comillas dobles (sin usebackq) o entre comillas simples (con usebackq), por ejemplo, (MyString) o ("MyString"). Se trata a <literalstring> como una sola línea de entrada de un archivo. Al analizar <literalstring> entre comillas dobles, los símbolos de comando como (\ & | > < ^) se tratan como caracteres normales.

  • Análisis de salida: puede usar el comando for /f para analizar la salida de un comando al colocar un <command> entrecomillado entre paréntesis. Se trata como una línea de comandos, que se pasa a un Cmd.exe secundario. La salida se captura en la memoria y se analiza como si fuera un archivo.

Ejemplos

Para usar for en un archivo por lotes, use la sintaxis siguiente:

for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]

Para mostrar el contenido de todos los archivos del directorio actual que tienen la extensión .doc o .txt mediante la variable reemplazable %f, escriba lo siguiente:

for %f in (*.doc *.txt) do type %f

En el ejemplo anterior, cada archivo que tiene la extensión .doc o .txt en el directorio actual se sustituye por la variable %f hasta que se muestra el contenido de cada archivo. Para usar este comando en un archivo por lotes, reemplace todas las repeticiones de %f por %%f. De lo contrario, se omite la variable y se muestra un mensaje de error.

Para analizar un archivo, omitiendo líneas comentadas, escriba lo siguiente:

for /f eol=; tokens=2,3* delims=, %i in (myfile.txt) do @echo %i %j %k

Este comando analiza cada línea en myfile.txt. Omite aquellas líneas que comienzan por un punto y coma y pasa el segundo y tercer token de cada línea al cuerpo de for (los tokens se delimitan con comas o espacios). El cuerpo de la instrucción for hace referencia a %i para obtener el segundo token, %j para obtener el tercer token y %k para obtener todos los tokens restantes. Si los nombres de archivo que proporciona contienen espacios, coloque el texto entre comillas (por ejemplo, Nombre del Archivo). Para usar comillas, debe usar usebackq. De lo contrario, las comillas se interpretan como la definición de una cadena literal que se va a analizar.

%i se declara explícitamente en la instrucción for. %j y %k se declaran implícitamente mediante tokens=. Se puede usar tokens= para especificar hasta 26 tokens si no se provoca un intento de declaración de una variable superior a la letra z o Z.

Para analizar la salida de un comando colocando set entre paréntesis, escriba lo siguiente:

for /f "usebackq delims==" %i in (`set`) do @echo %i

Para realizar un bucle recursivo de todos los archivos de un directorio, incluyendo los subdirectorios y el eco de su ruta de acceso completa, cuándo se modificaron por última vez y su tamaño de archivo, escriba:

for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA