batch-file
Para bucles en archivos por lotes
Buscar..
Sintaxis
- para / l %% p in (startNumber, increment, endNumber) comando do
- para / f %% p en (nombre de archivo) comando do
- para / f %% p en ("textStrings") do comando
- para / f %% p en ('comando') comando do
- para / r drive: \ path %% p in (set) do command
- para / d %% p en (directorio) comando do
Observaciones
El comando for
acepta opciones cuando se usa el indicador /f
. Aquí hay una lista de opciones que se pueden usar:
delims=x
caracteres delimitadores para separar tokensskip=n
Número de líneas a omitir al principio del archivo y cadenas de textoeol=;
Carácter al inicio de cada línea para indicar un comentario.tokens=n
Elementos numerados para leer de cada línea o cadena para procesarusebackq
usa otro estilo de cita:Use comillas dobles para nombres de archivo largos en "archivos"
Utilice comillas simples para 'textStrings'
Usa las comillas de vuelta para `command`
Recorriendo cada línea en un conjunto de archivos
Lo siguiente hará eco de cada línea en el archivo C:\scripts\testFile.txt
. Las líneas en blanco no serán procesadas.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
Un ejemplo más avanzado muestra cómo se puede usar la derivación en el ciclo FOR de un conjunto restringido de archivos para redirigir la ejecución por lotes, mientras se guarda el contenido buscado en un archivo:
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
Tenga en cuenta el tiempo en que las cadenas de comando se dividen en varias líneas de código y los grupos de comandos están separados por paréntesis
Visitar directorios de forma recursiva en un árbol de directorios
for /r
comando for /r
se puede usar para visitar recursivamente todos los directorios en un árbol de directorios y ejecutar un comando.
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
Notas:
- para / r - Recorrer archivos (subcarpetas Recurse).
- pushd - Cambie el directorio / carpeta actual y almacene la carpeta / ruta anterior para usar con el comando POPD.
- popd : cambie el directorio de nuevo a la ruta / carpeta almacenada más recientemente por el comando PUSHD.
Renombrando todos los archivos en el directorio actual
Lo siguiente usa una variable con un bucle for
para renombrar un grupo de archivos.
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
Al definir el nombre de la variable %%j
y asociarlo con todos los archivos actuales (*.*)
, Podemos usar la variable en un bucle for
para representar cada archivo en el directorio actual.
Cada iteración (o paso) a través del bucle procesa un archivo diferente del grupo definido (que podría haber sido cualquier grupo, por ejemplo, *.jpg
o *.txt
).
En el primer ejemplo, sustituimos el texto: la cadena de texto "old" se reemplaza por la cadena de texto "new" (si, pero solo si, el texto "old" está presente en el nombre del archivo).
En el segundo ejemplo, agregamos texto: el texto "Prefijo" se agrega al inicio del nombre del archivo. Esto no es una sustitución. Este cambio se aplicará a todos los archivos del grupo.
En el tercer ejemplo, nuevamente agregamos texto: el texto "Sufijo" se agrega al final del nombre del archivo. De nuevo, esto no es una sustitución. Este cambio se aplicará a todos los archivos del grupo.
La línea final realmente maneja el cambio de nombre.
Iteración
for /L %%A in (1,2,40) do echo %%A
Esta línea se repetirá del 1 al 39, aumentando en 2 cada vez.
El primer parámetro, 1
, es el número inicial.
El segundo parámetro, 2
, es el incremento.
El tercer parámetro, 40
, es el máximo.