Finalidad:Repetir un comando para varios valores de una variable

 

Formato:Modo de archivo y cadena

PARA [distancia...] [/I"texto"] [/A:[[-|+]rhsadecijopt /D /F ["opciones"] /H /Nj /O:[-]acdeginorstuz /R [camino] [/T"delimitadores"] /W ] %var EN ([@]set) HACER comando | (comando ... [DEJAR PARA] )

 

Modo contado

FOR /L %var IN (inicio, paso, fin) DO comando | (comando... [LEAVEFOR])

 

opcionesOpciones de análisis para un "análisis de archivos" FOR.
distanciaUno o mas distancia Especificaciones
camino El directorio inicial para un FOR "recursivo".
%var La variable que se utilizará en el comando ("variable FOR").
set Un conjunto de valores para la variable.
comienzo El valor inicial para un FOR "contado".
paso El valor de incremento para un FOR "contado".
final El valor límite para un FOR "contado".
comandoUn comando o grupo de comandos a ejecutar para cada valor de la variable.

 

/A: (Selección de atributo)

/N (valores predeterminados)

/D(solo directorios)

/O:... (Orden)

/F(análisis de archivos)

/R(ecursivo)

/H(puntos ide)

/T (lista delimitadora)

/I rango de descripción

/W(tarjetas ild)

/L (bucle contado)

 

 

Selección de archivo

 

soportes interruptores de atributos, extendido comodines, rangos, múltiples nombres de archivos y incluir listas.

 

Los rangos deben aparecer inmediatamente después de la palabra clave FOR después de las expansiones de alias (si las hay) y solo afectan la selección de archivos especificados mediante comodines.

 

Utilice comodines con precaución sobre volúmenes LFN; ver Búsquedas de archivos LFN para más detalles.

 

Uso:

 

FOR comienza creando un set. Luego ejecuta un comando para cada miembro de set. El comando puede ser un comando interno, un alias, un comando externo o un archivo por lotes. Los miembros de set puede ser una lista de nombres de archivos, cadenas de texto, un grupo de valores numéricos o texto leído de una lista de archivos.

 

Cuándo set se compone de texto o varios nombres de archivos separados (no una lista de inclusión), los elementos deben estar separados por espacios, tabulaciones o comas.

 

FOR incluye una gran cantidad de opciones, algunas de las cuales duplican funciones disponibles en otros comandos internos. También admite convenciones adicionales que no se encuentran en nuestros otros comandos, incluidas por compatibilidad con CMD.

 

Las primeras tres secciones a continuación (Trabajar con archivos, Trabajar con texto y Recuperar texto de archivos) describir el comando FOR y las mejoras al mismo que se incluyen en TCC. Las secciones sobre Analizar texto de archivos y Bucles FOR contados describir las características agregadas para la compatibilidad con CMD. las secciones Recursión de directorio y Redirección de salida advertir de consideraciones especiales. La sección titulada Otras Notas contiene información que puede necesitar si utiliza ampliamente cualquier aspecto del comando FOR.

 

FOR establece dos variables internas:

 

%_for_filesEl número de archivos procesados.
%_for_errorsel numero de errores

 

Si Errores CMD duplicados la opción de configuración está configurada, TCC emulará el comportamiento CMD no documentado cuando FOR set Los argumentos se dividen en varias líneas. Por ejemplo:

 

para %a en (

una

dos

Tres

) hacer (

eco %a

)

 

Trabajar con archivos

 

Normalmente, set es una lista de archivos especificados con comodines. Por ejemplo, si usa esta línea en un archivo por lotes:

 

para %x en (*.txt) lista %x

 

Entonces Anuncia se ejecutará una vez para cada archivo en el directorio actual con la extensión .TXT. La variable FOR %x se establece igual a cada uno de los nombres de archivo por turno, luego se ejecuta el comando LIST para cada archivo. (Podrías hacer lo mismo más fácilmente con un simple LISTA *.TXT. Usamos FOR aquí para que pueda tener una idea de cómo funciona, usando un ejemplo simple. Muchos de los ejemplos de esta sección están construidos de la misma manera).

 

Set Puede incluir varios archivos e incluir listas, como esta:

 

para %x en (d:\*.txt;*.doc;*.asc e:\test\*.txt;*.doc) escriba %x

 

PARA soportes comodines y comodines extendidos, así como directorio principal extendido nombres, p.ej, ...\*.TXT para procesar todos los .TXT archivos que están contenidos en el directorio 2 niveles por encima del directorio actual.

 

Por defecto aquellos miembros de set que incluyen comodines solo coinciden con archivos, no con directorios.

 

Cuando usa FOR en una unidad LFN, debe citar cualquier nombre de archivo dentro del conjunto que contenga espacios en blanco o caracteres especiales. La misma restricción puede aplicarse a los nombres devueltos en la variable FOR, si los pasa a TCC comandos internos u otros comandos que requieren citar nombres de archivos con espacios en blanco. FOR no cita los nombres devueltos automáticamente, incluso si incluyó comillas en el conjunto.

 

Si el conjunto incluye nombres de archivos, la lista de archivos se puede refinar aún más usando fecha, hora, tamaño, descripción y exclusión de archivos. rangos. El rango o rangos deben colocarse inmediatamente después de la palabra FOR. Los rangos afectan sólo a aquellos miembros del conjunto que contienen comodines. Por ejemplo, el FOR siguiente procesará todos los *.TXT archivos que se crearon o actualizaron el 4 de diciembre de 2018 y del archivo ABC.LST  independientemente de su marca de tiempo:

 

para /[d12-4-2018,+0] %x en (*.txt abc.lst) ...

 

If comando es un comando interno que admite rangos, también se puede utilizar un rango independiente en comando misma.

 

También puede refinar la lista limitándola con el /A: opción para seleccionar solo archivos que tengan atributos específicos.

 

Cuando utiliza comodines para especificar set, FOR escanea el directorio y encuentra cada archivo que coincida con los nombres comodín que especificó. Si, durante el procesamiento del comando FOR, crea un nuevo archivo que podría incluirse en set, puede aparecer o no en alguna iteración posterior del mismo comando FOR. La aparición o no del nuevo archivo depende de su ubicación física en la estructura del directorio. Por ejemplo, si usa FOR para ejecutar un comando para todos.TXT archivos y el comando también crea uno o más archivos .TXT archivos, esos archivos nuevos pueden procesarse o no durante el comando FOR actual, dependiendo de dónde estén ubicados en la estructura física del directorio. Esta es una restricción de Windows sobre la cual TCC no tiene control. Por lo tanto, para lograr resultados consistentes, debe crear comandos FOR que no creen archivos que puedan formar parte del conjunto del comando actual.

 

Trabajar con texto

 

Set También puede estar compuesto por texto en lugar de nombres de archivos. Por ejemplo, para crear tres archivos llamados file1, file2 y file3, cada uno con una línea en blanco:

 

para %sufijo en (1 2 3) eco. > archivo%sufijo

 

También puede utilizar los nombres de las variables de entorno como texto. Este ejemplo muestra el nombre y el contenido de varias variables del entorno (consulte la discusión general sobre Entorno para obtener detalles sobre el uso de corchetes al expandir variables de entorno):

 

para %var en (comspec de solicitud de ruta) echo %var=%[%var]

 

Recuperar texto de archivos

 

Si el nombre de un archivo en set tiene el prefijo @ (signo "arroba"), se considera como un @lista de archivos. FOR extrae cada línea del archivo y la coloca en la variable FOR.

 

advertencia: si la línea contiene caracteres que son sintácticamente significativos para TCC, por ejemplo, uno de los caracteres , puede tener efectos indeseables. Puede utilizar la opción /X de SETDOS para mitigarlos.

 

Si utiliza @ESTAFA como nombre de archivo, FOR leerá desde la entrada estándar (normalmente un archivo de entrada redirigido) o desde una tubería. Si utiliza @ACORTAR: (o @CLIP0: - @CLIP9:) como nombre de archivo, FOR leerá cualquier texto disponible en el portapapeles de Windows. Ver Redirección y canalización para obtener más información sobre estas características.

 

See @lista de archivos para obtener detalles adicionales.

 

Analizar texto de archivos

 

Otro método para trabajar con texto de archivos es hacer que FOR analice cada línea de cada archivo por usted. Para comenzar un análisis de archivos FOR, debe utilizar el /F opción e incluya uno o más nombres de archivos en el conjunto. Cuando utiliza esta forma de FOR, el nombre de la variable debe ser una sola letra, por ejemplo, %a.

 

Este método de análisis, incluido por compatibilidad con CMD, puede resultar engorroso e inflexible. Para un método más potente, utilice FOR con @Nombre del archivo como el set para recuperar cada línea del archivo, como se describe en la sección anterior, y usar funciones variables como @CAMPO, @INSTR, @IZQUIERDA, @BIEN y @PALABRA para analizar la línea (ver Funciones variables para obtener información sobre funciones variables).

 

De forma predeterminada, FOR extraerá la primera palabra o token de cada línea y la devolverá en la variable. Por ejemplo, para mostrar la primera palabra en cada línea del archivo FLIST.TXT:

 

para /f %a en (flist.txt) echo %a

 

Puede controlar la forma en que FOR /F analiza cada línea especificando una o más opciones de análisis en una cadena entrecomillada inmediatamente después de la /F. Las opciones disponibles son:

 

saltar=n:  FOR /F se saltará n líneas al principio de cada archivo antes de analizar el resto del archivo.

 

fichas =n, m, ...: De forma predeterminada, FOR /F devuelve sólo la primera palabra o ficha de cada línea analizada en la variable que nombró. Puede hacer que devuelva más de un token en la variable, o que devuelva tokens en varias variables, con esta opción.

 

Esta opción va seguida de una lista de números separados por comas. El primer número le dice a FOR /F qué token devolver en la primera variable, el segundo número le dice cuál devolver en la segunda variable, etc. Las variables se suceden alfabéticamente comenzando con la variable que nombre en la línea de comando FOR. Este ejemplo devuelve la primera palabra de cada línea en TEST.TXT en %d, el segundo en %ey el tercero en %f:

 

para /f "tokens=1,2,3" %d en (test.txt) ...

 

También puedes indicar un rango de tokens separando los números con un guión. -.

 

eol=c: Si FOR /F encuentra el carácter c en la línea, asumirá que el carácter y cualquier texto que le siga son parte de un comentario e ignorará el resto de la línea.

 

delims =xxx ..: De forma predeterminada, FOR /F ve espacios, tabulaciones y comas como delimitadores de palabras o tokens. Esta opción reemplaza esos delimitadores con todos los caracteres que siguen al signo igual hasta el final de la cadena. Por lo tanto, esta opción debe ser la última utilizada en la cadena de opciones citadas.

 

usobackq : Duplica lo incómodo CMD sintaxis. Una cadena entre comillas se ejecuta como un comando; una cadena entre comillas simples es una cadena literal; y las comillas dobles citan los nombres de los archivos en el conjunto de archivos. No recomendamos usobackq para archivos por lotes escritos para TCC, ya que TCC tiene formas mucho más elegantes de hacer las mismas cosas.

 

También puedes usar FOR /F para analizar una sola cadena en lugar de cada línea de un archivo usando la cadena, entre comillas, como conjunto. Por ejemplo, este comando asignará la variable A a la cuerda así, B a is, etc., luego muestre así:

 

for /f "tokens=1,2,3,4" %a in ("esto es una prueba") echo %a

 

Bucle FOR "contado"

 

El "contado PARA"El bucle está incluido por compatibilidad con CMD. En la mayoría de los casos, encontrará el DO comando más útil para realizar bucles contados.

 

En un comando FOR contado, el set se compone de valores numéricos en lugar de texto o nombres de archivos. Para comenzar un comando FOR contado, debe utilizar el /L opción y luego incluir tres valores, separados por comas, en set. Estos son los comienzo, paso y final valores. Durante la primera iteración del bucle FOR, la variable se establece igual a comienzo valor. Antes de cada iteración, la variable se incrementa en la paso valor. El ciclo termina cuando la variable excede el final valor. Este ejemplo imprimirá los números del 1 al 10:

 

para /l %val en (1,1,10) eco %val

 

Este ejemplo imprimirá los números impares de 1 a 10 (1, 3, 5, 7 y 9):

 

para /l %val en (1,2,10) eco %val

 

Las paso El valor puede ser negativo. Si es así, el ciclo finalizará cuando la variable sea menor que el final .

 

La entrada numérica se puede ingresar en formato decimal (una secuencia de 0 a 9 dígitos) o en formato hexadecimal ("0x" seguido de una secuencia de 0 a F dígitos hexadecimales).

 

¡ADVERTENCIA! No debe haber espacios en blanco entre comienzo y la coma posterior, ni entre paso y su posterior coma. Se aceptan espacios en blanco después de la coma.

 

Recursión de directorio

 

De forma predeterminada, FOR solo funciona con archivos en el directorio actual o en un directorio específico. interruptor de opción /R especifica que la búsqueda debe procesar subdirectorios de forma recursiva. Si especifica un nombre de directorio inmediatamente después /R, FOR comenzará en ese directorio y luego buscará en cada uno de sus subdirectorios. Si no se especifica ningún directorio después del /R, la búsqueda comienza en el directorio predeterminado actual. Si especifica un directorio, y su nombre incluye caracteres especiales, debe estar entre comillas dobles. Por ejemplo, debe citarse si se especifica con la ayuda de una variable de entorno, por ejemplo, %windir\comando.

 

Hay dos diferencias en la invocación de comando causada por recursión de directorio:

 

La variable de control de bucle contiene el nombre completo del archivo coincidente.

comando se ejecuta con el directorio predeterminado establecido en el directorio en el que se encontró el archivo

 

Este ejemplo procesa todos .TXT archivos en el directorio actual y sus subdirectorios:

 

para /r %x en (*.txt) ...

 

Este ejemplo funciona con todos los .BAK archivos en el disco D:

 

para /r d:\ %x en (*.bak) ...

 

Redirección de salida

 

La redirección de salida predeterminada (es decir, para... > nombre de archivo) crea un nuevo archivo de salida en cada iteración. Si nombre de archivo no incluye una ruta de archivo absoluta, se creará en relación con el directorio predeterminado actual. Si utiliza la recursión de directorios, esta ruta cambiará para cada directorio procesado. La forma más sencilla de forzar un único archivo de destino es encerrar todo el comando entre paréntesis, por ejemplo:

 

(para %x en el comando (establecer)) > nombre de archivo

 

Otras Notas

 

Puedes usar cualquiera % or %% delante del nombre de la variable (var) en el comando. Cualquiera de los dos formularios funcionará, ya sea que el comando FOR se escriba desde la línea de comando o sea parte de un alias o un archivo por lotes. (CMD que requiere un solo % si se usa FOR en la línea de comando, pero requiere %% si se usa FOR en un archivo por lotes.) Tenga en cuenta que debe tener al menos un % firmar presente.

El nombre de la variable puede tener hasta 80 caracteres.

Si el comando FOR es un alias, por ejemplo, alias para=*para /h, distancia Se ignorarán las especificaciones.

La palabra DO es innecesaria pero aceptada. No lo confundas con lo completamente ajeno. DO mando.

Si el nombre de la variable FOR var es un solo carácter, por compatibilidad con CMD, se crea en el entorno de una manera especial que no sobrescribe una variable de entorno existente con el mismo nombre. Lo que sea comando contiene el signo % seguido inmediatamente por el carácter que es el nombre de la variable FOR, se reemplaza por su valor, independientemente de los caracteres que lo siguen. Por ejemplo, el siguiente comando intenta agregar a: y b: hasta el final de TRAYECTORIA, pero no funcionará según lo previsto:

 

para %p en (a: b:) ruta %ruta;%p

camino

b:ath;b:

 

Las %p in %camino se interpretó como la variable FOR %p seguido del texto ath, no lo que se pretendía. Para evitar esto, use una letra diferente o un nombre más largo para la variable FOR, o use corchetes alrededor del nombre de la variable, como se muestra en los ejemplos siguientes, cualquiera de los cuales logra el objetivo original:

 

para %p en (a: b:) ruta %[ruta];%p

para %x en (a: b:) ruta %ruta;%x

para %px en (a: b:) ruta %path;%px

 

Si el nombre de la variable FOR contiene más de un carácter, se crea en el entorno y se borra cuando se completa FOR, independientemente de que existiera o no una variable con ese nombre antes de FOR. No se puede modificar con el SET, ESETo UNSET comandos. Si ya tenía una variable con ese nombre, ya no será accesible. Por ejemplo, un comando que comienza

 

para % ruta en...

 

escribirá sobre su actual TRAYECTORIA ajuste, luego borre el TRAYECTORIA variable completamente cuando se realiza FOR.

 

Comando También puede utilizar la variable FOR con la sintaxis especial de CMD descrita en Sintaxis especial para compatibilidad CMD.

 

El siguiente ejemplo utiliza FOR con funciones variables para eliminar el .BAK archivos para los cuales un correspondiente .TXT El archivo existe en el directorio actual (esto debe ingresarse en una línea):

 

para %archivo en (*.txt) del %@nombre[%archivo].bak

 

Es posible que el comando anterior no funcione correctamente en una unidad LFN, porque el comando devuelto ARCHIVO La variable puede contener espacios en blanco. Para corregir este problema, necesita dos conjuntos de comillas, uno para DEL y uno para %@NOMBRE:

 

para %archivo en (*.txt) del "%@name["%file"].bak"

 

Puedes usar agrupación de comandos para ejecutar múltiples comandos para cada elemento en set. Por ejemplo, el siguiente comando copia cada .WKQ archivo en el directorio actual al D:\WKSAVE directorio, luego cambia la extensión de cada archivo en el directorio actual a .SAV:

 

[para %archivo en (*.wkq) (copiar %archivo d:\wksave\ & ren %archivo *.sav)

 

o (en un archivo por lotes):

 

para %archivo en (*.wkq) (

 copiar %archivo d:\wksave\

 ren %archivo *.sav

)

 

En un archivo por lotes puedes usar GOSUB ejecutar una subrutina para cada elemento en set. Dentro de la subrutina, la variable FOR se puede utilizar como variable de entorno. Esta es una manera conveniente de ejecutar una secuencia compleja de comandos para cada elemento en set sin LLAMENOSing otro archivo por lotes.

 

Un uso inusual de FOR es ejecutar una colección de archivos por lotes u otros comandos con el mismo parámetro. Por ejemplo, es posible que desee que tres archivos por lotes operen en el mismo archivo de datos. El comando FOR podría verse así:

 

para %cmd en (filetest fileform fileprnt) %cmd archivo de datos

 

Esta línea se expandirá a tres comandos separados:

 

archivo de datos de prueba de archivo

archivo de datos de formato de archivo

archivo de datos de impresión de archivo

 

Las declaraciones FOR se pueden anidar.

 

DEJAR PARA

 

La palabra clave especial LEAVEFOR se puede utilizar dentro de un grupo de comando FOR. LEAVEFOR finaliza el procesamiento FOR actual y continúa con la línea que sigue al comando FOR, de manera similar a la de la palabra clave LEAVE en un DO mando.

 

para %i en (*) (

...

si "%i" == "xyz.abc" dejar para

 ...

)

 

Opciones:

 

/A:Procese sólo aquellos archivos que tengan los atributos especificados. /A: se utilizará sólo cuando se procesen nombres de archivos comodín en set. Se ignorará para nombres de archivos sin comodines u otros elementos en set. Vea Cambios de atributos para obtener información sobre los atributos que pueden seguir /A:.

 

Por ejemplo, para procesar solo aquellos archivos con el atributo de archivo establecido:

 

for /a:a %f in (*) echo %f necesita una copia de seguridad!

 

Predeterminado: /A:-DHS, es decir, incluir sólo archivos sin el oculto y te los atributos.

 

Puede especificar /R:= para mostrar un cuadro de diálogo que le ayudará a establecer atributos individuales.

 

/DSólo devuelve subdirectorios, excluyendo "."Y"..".

 

/FDevuelve una o más palabras o tokens de cada línea de cada archivo en set. /F La opción puede ir seguida de una o más opciones en una cadena entre comillas que controlan cómo se realiza el análisis. Ver Analizar texto de archivos.

 

/HSuprime la asignación del "." y directorios ".." a la variable FOR cuando los directorios se incluyen explícitamente usando el /A: .

 

/I"texto"Seleccione nombres de archivos haciendo coincidir el texto en sus descripciones. Ver Descripción Rangos.

 

/LInterpreta los tres valores en set como el comienzo, paso y final valores de un bucle contado. Ver Bucles FOR contados.

 

/Nueva JerseyNo recurra a enlaces simbólicos o uniones (consulte /R).

 

/O:...Ordenar los archivos antes de procesarlos.

 

Puede utilizar cualquier combinación de las opciones de clasificación siguientes. Si se utilizan varias opciones, el listado se ordenará con la primera opción de clasificación como clave principal, la siguiente como clave secundaria, y así sucesivamente:

 

nOrdenar por nombre de archivo y extensión, a menos que e está incluido explícitamente.
-Invertir el orden de clasificación para la siguiente clave de clasificación
aOrdene los nombres y las extensiones en el orden ASCII estándar, en lugar de hacerlo numéricamente cuando se incluyen subcadenas numéricas en el nombre o la extensión.
cOrdenar por relación de compresión
dOrdenar por fecha y hora (los más antiguos primero); ver también /T:acw
eOrdenar por extensión
gSubdirectorios de grupo primero, luego archivos
iOrdenar por descripción
oOrdenar por propietario
rInvertir el orden de clasificación para todas las opciones
sOrdenado por tamaño
tIgual que d
uSin clasificar
zIgual que s

 

La opción /O:... guarda todos los nombres de archivos coincidentes y luego realiza la operación solicitada. Esto evita el problema potencial de procesar archivos más de una vez.

 

/R [camino]Busque en el directorio actual y en todos sus subdirectorios los archivos en set. Si el /R va seguido de un nombre de directorio, busque archivos en ese directorio y en todos sus subdirectorios. Advertencia: si el nombre del directorio incluye caracteres especiales, incluido "%" para indicar una variable de entorno, debe estar entre comillas dobles ("). /R admite nombres de carpetas de shell de Windows; consulte CDS para más detalles.

 

/T"texto"Especifique los delimitadores que se utilizarán al analizar un conjunto de cadenas.

 

/WEl conjunto FOR debe procesarse como nombres de archivos, incluso si no se detectan comodines. (Esto es útil si desea utilizar expresiones regulares con FOR).