lunes, 21 de mayo de 2018

Script para buscar archivos en Windows


Buscar archivos a veces resulta más rápido y ligero si lo hacemos desde la línea de comandos, en vez de hacerlo mediante una aplicación gráfica como el explorador de archivos de Windows.

Aprovechando la eficiencia del comando WHERE se puede hace un script .bat en donde, cada vez que necesitemos buscar algún archivo, sólo tengamos que ejecutarlo e indicar que buscar y en dónde.


script windows para buscar archivos

Para crearlo sólo tenemos que abrir un editor de texto plano como Notepad (bloc de notas), copiar el código indicado a continuación y guardar el archivo con extensión .bat


Código a introducir en el archivo, que podríamos llamar por ejemplo "buscador.bat":

@echo off
rem autor: InformaticCity
rem fecha: 21/05/2018
title=Buscador de archivos
rem El color puede modificarse a gusto del usuario editando el número a continuación
color 57
echo.
echo============================================================
echo= =
echo= BUSCADOR DE ARCHIVOS =
echo= =
echo============================================================
echo.
rem Volver a ejecutar en caso de seguir buscando
:retorno
echo.
rem Declaración de las variables a usar
set ruta=0
set cadena=exit
rem Se pide al usuario que introduzca la unidad de donde quiere buscar
set /p ruta= Unidad de disco (C, D, etc.):
rem Si no introduce ningún valor da error
if %ruta%==0 goto retorno
echo.
rem Se pide al usuario que introduzca una cadena de texto para buscar
rem Previamente se establece un punto de retorno si hay error
:error
set /p cadena= Archivo (nombre o parte del mismo):
rem Si no introduce nada dara error
if %cadena%==exit goto error
echo.
echo.
rem Si todas las condiciones se cumplen se ejecuta la búsqueda y devuelve resultado
where /t /r %ruta%:\ *%cadena%* | more
echo.
echo.
rem Se pregunta al usuario si quiere salir del programa o quiere buscar de nuevo
set /p seguir= ¿Volver a buscar? (s/n):
rem Si quiere el usuario quiere continuar ha de escribir una 's' ó una 'S'
if %seguir%==s (goto retorno) else (goto next0)
:next0
if %seguir%==S (goto retorno) else (goto exit)
echo.
echo.
rem Si se decidió no seguir buscando el programa finaliza
exit


Para utilizarlo sólo hay que:

  1. Hacer doble clic sobre el archivo
  2. Indicar en qué unidad queremos buscar
  3. Indicar que queremos buscar
  4. Al finalizar preguntará si deseamos volver a buscar o salir 

buscador de archivos

Funciona en Windows Vista/7/8/10

23 comentarios :

  1. Que línea tendría que añadir al script buscador.bat? si quiero que en caso de que me encuentre el fichero que yo le he indicado, lo copie a una ruta que yo le indique?
    Muchas gracias!! me ha venido bien el script

    ResponderEliminar
    Respuestas
    1. Hola y disculpa la demora en la respuesta. Una posible solución sería añadir un fragmento de código para preguntar si se quiere copiar. Pero ojo si hay más de un archivo! Se podría añadir algo así:
      where /t /r %ruta%:\ *%cadena%* > resultados.txt
      more resultados.txt
      echo.
      echo.
      rem preguntar si se desea copiar el archivo
      set /p copiar= ¿Desea copiar el archivo? (s/n)
      if %copiar%==s (goto next1) else (goto next2)
      :next1
      set /p destino= Indicar la ruta completa de destino:
      set copiar=<resultados.txt
      xcopy %copiar% %destino%
      del resultados.txt
      echo archivo copiado en %destino%
      :next2
      echo.
      rem Se pregunta al usuario si quiere salir del programa
      set /p seguir= ¿Volver a buscar? (s/n):

      Espero que te pueda ayudar
      Saludos

      Eliminar
  2. hola, consulta si quisiera borrar todos los archivos que busco el scrip como seria.
    gracias por su respuesta.

    ResponderEliminar
  3. Hola damian007. Esto te recomiendo que lo hagas con cuidado porque podrías borrar algo que no quisiseras, y es un poco peligroso. Lo más aconsejable sería exportar quizá a un txt, pero igualmente de dejo el fragmento de código aquí. Como verás sustituiría desde el 'where' hasta donde pregunta si quieres volver a buscar:

    where /f /r %ruta%:\ *%cadena%* | more
    rem Preguntar si se quiere eliminar los archivos
    set /p eliminar= ¿Desea eliminar los archivos encontrados? (s/n):
    if %eliminar%==s (goto next1) else (goto next2)
    rem En caso de que no quiera seguir se irá al punto en que pregunta volver a buscar
    if %eliminar%==S (goto next1) else (goto next2)
    :next1

    for /R C:\ %%f in (*%cadena%*) do del /q "%%~ff"
    echo.
    :next2
    rem Se pregunta al usuario si quiere salir del programa o quiere buscar de nuevo
    set /p seguir= ¿Volver a buscar? (s/n):

    Espero que te pueda ayudar. Saludos!

    ResponderEliminar
  4. Hola, muy buen aporte con el script que te ayuda a buscar. Tal vez no se si es posible me gustaria ver la manera que mediante un script en un archivo.txt poder buscar y reemplazar texto. muchas gracias por la ayuda.

    ResponderEliminar
    Respuestas
    1. Una forma más sencilla sería hacerlo con Powershell que ya incorpora esa función, por ejemplo:

      <#
      Script para reemplazar una cadena de carácteres dentro de un archivo .txt

      #>

      Write-Host "SUSTITUIR UNA CADENA DENTRO DE UN TXT"
      Write-Host "-------------------------------------"
      $ruta = Read-Host -Prompt "Ruta completa o relativa al archivo (ejemplo: C:\prueba.txt): "
      $cadenaVieja = Read-Host -Prompt "Indica la cadena a buscar en el documento: "
      $cadenaNueva = Read-Host -Prompt "Indica la nueva cadena que la sustituirá: "
      (Get-Content $ruta) | ForEach-Object {$_ -replace "$cadenaVieja", "$cadenaNueva"} | Set-Content $ruta
      Write-Host "Hecho!"

      Eliminar
    2. Muchas gracias por la ayuda! Fue muy util tu sugerencia

      Eliminar
  5. Excelente trabajo, claro y bien explicado, funciona perfectamente, felicitaciones y muchas gracias por tu ayuda

    ResponderEliminar
  6. hola amigo, este scrip funciona bien, que codigo puedo agregarle para;
    al abrir el programa automaticamente me busque el nombre de algunos archivos que yo agregue al script y de la misma forma que solo me busque en la carpeta donde lo estoy ejecutando

    ResponderEliminar
  7. Excelente aporte amigo, como haria si quiero que me encuentre una carpeta que conozco parte del nombre y me devuelva la ruta

    ResponderEliminar
  8. ¡Buenos días!
    El SCRIPT es una maravilla, pero me gustaría averiguar cómo añadir para qué busque cualquier carpeta y/o archivo de un período de tiempo en concreto. Una vez encontrados, qué de la opción de eliminarlos a la Papelera de Reciclaje ó definitivamente.
    Muchas gracias y un saludo.

    ResponderEliminar
  9. Hola, como hago para buscar desde un equipo a otro en la misma red

    ResponderEliminar
    Respuestas
    1. Hola Yaarmi. Tendrías priero que mapear una unidad de red con la ruta al otro equipo. Por ejemplo "net use t: \\IPequipoEnRed" y después en el script ya podrás indicar la letra que le hayas asignado. Saludos!

      Eliminar
  10. Excelente, gracias así me funcionó

    ResponderEliminar
  11. Hola que tal, felicidades por tu aporte, es magnifico. Agradeceria me ayudes a saber como haría para que un script, elimine todos los directorios que contiene un archivo .CSV. Es decir, supongamos que el archivo CSV tenga estas filas: "C:\Temp\archivo.jpg", luego otra fila con ""C:\Temporal\archivo2.jpg", luego otra fila con "C:\OtroTemp\archivo3.jpg", y asi cientos de rutas en cada fila. ¿Como haria para que el script lea este archivo CSV, identifique o lea las filas que contiene con cada ruta o directorio, encuentre los archivos y las elimine?

    Muchisimas gracias

    ResponderEliminar
    Respuestas
    1. Sería algo como lo siguiente. Teniendo en cuenta que está puesto ahora para dos columnas separadas por punto y coma:

      @echo off
      rem autor: InformaticCity
      rem fecha: 12/05/2021
      title=Eliminador de archivos
      rem Este script borra todos los archivos que estén indicados dentro de un fichero .csv
      color 3F
      echo.
      echo============================================================
      echo= =
      echo= ELIMINADOR DE FICHEROS LISTADOS EN CSV =
      echo= =
      echo============================================================
      echo.
      :inicio
      echo.
      rem Se pide al usuario que introduzca la ruta del archivo .csv
      set /p archivo=Ruta del archivo CSV (c:\archivo.csv):
      rem Si no introduce ningún valor da error
      if %archivo%=="" (goto inicio)
      echo.
      rem Se reciben los nombres y rutas de los ficheros a eliminar desde el .csv
      rem Se tiene en cuenta que el archivo csv tiene dos columnas y usa separador ";"
      for /F "tokens=1-2 delims=;" %%a IN (%archivo%) do del %%a %%b | echo %%a %%b
      set error=%errorlevel%
      if %error% GTR 1 (echo Se ha producido error: %error%)
      echo.
      echo.
      rem Preguntar si se quiere cargar otro archivo csv
      set /p seguir= ¿Volver a cargar otro archivo? (s/n):
      rem Si quiere el usuario quiere continuar ha de escribir una 's' ó una 'S'
      if %seguir%==s (goto inicio)
      if %seguir%==S (goto inicio) else (goto exit)
      echo.
      echo.
      :exit
      exit


      Saludos

      Eliminar
    2. Muchas gracias por el script! funcionó a la perfección! Excelente aporte!

      Eliminar
  12. Hola,

    Podrías indicarme cómo podría modificarlo para que busque un archivo.exe y lo elimine de manera silenciosa.

    Gracias

    ResponderEliminar
  13. Hola Yazmin, para buscar un archivo.exe debes indicarle el nombre del mismo y una vez que lo encuentre indicarle eliminar. El modo silencioso está activado para no confirmar caracteres comodín global. Si lo que no quieres es que no te pregunte si quieres borrarlo o no, y lo haga directamente, sólo tienes que eliminar estas líneas:

    set /p eliminar= ¿Desea eliminar los archivos encontrados? (s/n):
    if %eliminar%==s (goto next1) else (goto next2)
    if %eliminar%==S (goto next1) else (goto next2)

    Si no quieres borrarlas , añade delante de cada la palabra 'rem' delante y se quedarán como comentarios.
    Saludos

    También puedes optar por dejarlas comentadas sin borrarlas, y para eso todas han de empezar por la palabra 'rem'

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola,

      Gracias por responder, pero será que me puedes ayudar con unas dudas que tengo.

      1. Eliminar el archivo pero si se cambió el nombre se podría escribir de esta manera => AnyDesk*.exe
      2. Ejecutar el script y que busque en cualquier unidad.

      Eliminar
    2. Hola,
      He reformado el script para buscar y eliminar archivos pudiéndose ahora usar comodines. Además de poder hacer búsquedas en todas las unidades de disco existentes.

      El código es el que indico a continuación o si lo prefieres puedes descargar el archivo directamente desde https://drive.google.com/drive/folders/1ISDdQU_v1NccVHu4UHr4TiUBrUhVKPz3

      @echo off
      chcp 65001
      rem autor: InformaticCity.com
      rem fecha: 23/08/2021
      rem desc: Script que permite buscar archivos y si se desea eliminarlos
      title=Buscador y eliminar v3
      REM color 30
      echo.
      echo============================================================
      echo= =
      echo= BUSCAR Y ELIMINAR ARCHIVOS =
      echo= =
      echo============================================================
      echo.
      rem Punto de inicio
      :P1
      echo.
      rem Declaración de variables
      set ruta=0
      set cadena=0
      set temp=temp.txt
      echo Indicar la ruta donde se desea buscar (ejemplo C:\files)
      echo NOTA: Si se deja vacío buscará en todas las unidades de disco existentes.

      echo.
      set /p ruta= Ruta en donde buscar:
      echo.

      :P2
      rem Se pide introducir una cadena de texto para buscar
      rem Se permite el uso de comodines
      set /p cadena= Archivo (nombre o parte del mismo):
      rem Si no introduce nada dará error y volverá a preguntar
      if %cadena%==0 goto P2
      echo.
      echo.
      if %ruta%==0 ( goto P3 ) else ( goto P4 )

      :P3
      rem Al no haber indicado ruta busca en todas las unidades
      rem Se generará un archivo temporal "temp.txt" que después se borrará
      for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do (
      if exist "%%a:\" ( where /f /r %%a:\ %cadena% ) >> %temp% 2> NUL
      type %temp%
      )
      rem Preguntar si se quiere eliminar los archivos
      choice /c sn /m "¿Eliminar los archivos encontrados? "
      if %ERRORLEVEL% EQU 1 goto P5
      if %ERRORLEVEL% EQU 2 goto P6

      :P4
      rem Se especificó una ruta o unidad concreta
      where /f /r %ruta% *%cadena%* | more >> %temp%
      type %temp%
      rem Preguntar si se quiere eliminar los archivos
      choice /c sn /m "¿Eliminar los archivos encontrados? "
      if %ERRORLEVEL% EQU 1 goto P5
      if %ERRORLEVEL% EQU 2 goto P6

      :P5
      rem Eliminar archivos
      for /F tokens^=1^ delims^=^" %%a IN (%temp%) do del %%a | echo "eliminado: " %%a
      echo.

      :P6
      rem Si hay temporal se elimina
      if exist temp.txt ( del temp.txt )
      rem Se pregunta si quiere salir del programa o quiere buscar de nuevo
      choice /c sn /m "¿Volver a buscar? "
      if %ERRORLEVEL% EQU 1 goto P1
      if %ERRORLEVEL% EQU 2 goto P0

      :P0
      exit

      Saludos!

      Eliminar

Deja aquí tu comentario