es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentra una combinación de FolderName\file.name de forma recursiva en un archivo por lotes y devuelve la(s) ruta(s) completa(s).

Estoy buscando encontrar un nombre de archivo específico dentro de un nombre de carpeta específico en un directorio recursivamente y devolver la ruta completa si hay una coincidencia o múltiples coincidencias. Estoy buscando una búsqueda de patrón que incluso pueda usar una búsqueda de 3 partes, por ejemplo (carpetaA\carpetaB\nombre.archivo). Pero por ahora, 2 partes serán suficientes. Hasta ahora mis esfuerzos me han llevado a esto. Pero es terriblemente lento, “16+ segundos para encontrar la coincidencia”.

   ::buscar de forma recursiva la combinación nombrecarpeta\nombre.archivo

cd C:\carpetaBusqueda
   for /r %a in (NombreCarpeta) do @if exist "%~fa\nombre.archivo" echo %~fa
Solo necesito adentrarme hasta 2 o 4 niveles y obtener la primera coincidencia carpeta\archivo.ext y obtener la ruta completa. ¿Hay una forma más rápida de hacer esto, tal vez con el comando dir o una lista de exclusión o incluso una verdadera búsqueda de patrón *carpeta\archivo?
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Una forma de acelerar la búsqueda es usar el comando dir en lugar del bucle for. El comando dir tiene una opción /s que permite buscar de forma recursiva en subdirectorios.

    El comando para buscar un nombre de archivo específico dentro de un nombre de carpeta específico en un directorio de forma recursiva y devolver la ruta completa es:

    dir /s /b "C:\carpetaBusqueda\carpetaA\carpetaB\nombre.archivo"
    

    Esto buscará el nombre de archivo nombre.archivo en la ruta de carpeta C:\carpetaBusqueda\carpetaA\carpetaB y todos sus subdirectorios de forma recursiva. La opción /b mostrará únicamente la ruta completa del/os archivo(s) encontrado(s).

    Si deseas buscar un patrón de nombres de carpetas y archivos, puedes usar los comodines * y ?. Por ejemplo, para buscar todos los archivos con extensión .txt en una ruta de carpeta que comienza con logs y tiene un subdirectorio que comienza con sys, puedes utilizar el siguiente comando:

    dir /s /b "C:\carpetaBusqueda\logs*\sys*\*.txt"
    

    Esto buscará cualquier archivo con extensión .txt en una ruta de carpeta que comienza con logs y tiene un subdirectorio que comienza con sys, sin importar qué tan profundo esté ubicado el subdirectorio.

    Usar el comando dir debería ser más rápido que el bucle for, especialmente al buscar un gran número de archivos o carpetas.

Comments are closed.