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 tokens

  • skip=n Número de líneas a omitir al principio del archivo y cadenas de texto

  • eol=; 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 procesar

  • usebackq 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow