Windows 7: Búsqueda de ficheros desde la consola de comandos

Windows Técnico

Sindicación

Proximos HOLs

Loading...

En “MS Windows 7” existen gran diversidad de comandos útiles para ser utilizados desde la consola CMD, pero la falta de conocimiento de alguno de sus nombres y sobre todo de sus funcionalidades hace difícil la obtención de resultados óptimos a la hora de hacer determinadas consultas.

Tal es así, que ante la necesidad de realizar una búsqueda a través de línea de comandos de un fichero en el sistema nos encontramos con que se trata de una tarea algo más compleja de lo que inicialmente podría creerse.

Para abordar esta cuestión en primer lugar se ha intentado diversas combinaciones con el comando “DIR” sin lograr el resultado esperado, ya que al localizar el archivo únicamente devolvía el nombre del fichero y no la ruta en la que éste se encuentra. Es decir, listaba el fichero pero no la ubicación física donde podría ser localizado o si el fichero se encontraba en diferentes ubicaciones.

Por ejemplo:

clip_image002

Búsqueda de fichero con el comando DIR

Con “dir /s” se genera un listado recursivo de todos los ficheros que se encuentran bajo el directorio actual, es decir “C:\”,  y el resultado lo pasaría a través de una tubería al comando “find” que realizará la búsqueda de los ficheros que contentan en su nombre la palabra “calc.exe”. Y como se aprecia en la imagen anterior, sólo muestra los nombres de los ficheros que contienen esa cadena de texto, sin embargo no guarda la ruta de acceso a esos archivos.

Después de valorar otras alternativas se ha llegado al comando “ForFiles”, que finalmente ha resuelto la circunstancia.

Para comprender la solución planteada véase antes el contenido del fichero de ayuda para el comando forfiles  (“forfiles /?”).

 

Sintaxis:

 

FORFILES [/P nombre de ruta] [/M máscara de búsqueda] [/S]    [/C comando] [/D [+ | -] {dd/MM/yyyy | dd}]

 

 

Descripción:

 

 

Selecciona un archivo (o conjunto de archivos) y ejecuta un comando en ese archivo. Esto es útil para trabajos por lotes.

 

 

Lista de parámetros:

  •     /P    nombre de ruta:

Indica la ruta de acceso para iniciar la búsqueda. La carpeta predeterminada es el

directorio de trabajo actual (.).

  •     /M    máscara de búsqueda:

Busca archivos de acuerdo con una máscara de búsqueda. La máscara de búsqueda predeterminada es '*' .

  •     /S              

Indica a “forfiles” que realice recursividad en subdirectorios. Como "DIR /S".

  •     /C    comando:

Indica el comando que se va a ejecutar para cada archivo. Las cadenas de comandos

Deben estar entre comillas dobles.

                El comando predeterminado es "cmd /c eco @file".

Se pueden usar las siguientes variables en la cadena de comandos:

  •  
    • @file            - devuelve el nombre del archivo.
    • @fname   - devuelve el nombre de archivo sin extensión.
    • @ext            - devuelve sólo la extensión del archivo.
    • @path         - devuelve la ruta de acceso completa del archivo.
    • @relpath  - devuelve la ruta de acceso relativa del archivo.
    • @isdir         - devuelve "TRUE" si un tipo de archivo es un directorio y "FALSE" para archivos.
    • @fsize         - devuelve el tamaño del archivo en bytes.
    • @fdate       - devuelve la última fecha de modificación del archivo.
    • @ftime   - devuelve la última hora de modificación del archivo.

              Para incluir caracteres especiales en la línea de comandos, use el código hexadecimal

del carácter en formato 0xHH (ejemplo, 0x09 para tabulador). Interno comandos  CMD.exe deben estar precedidos por "cmd /c".

  •     /D    fecha         

Selecciona archivos con última fecha de modificación posterior o igual a (+), o anterior o igual a (-), la fecha especificada usando el formato "dd/MM/yyyy"; o selecciona archivos con última fecha de modificación posterior o igual a (+) la fecha actual más "dd" días, o anterior o igual a (-) la fecha actual menos "dd" días.

Un número de días "dd" puede ser cualquier número del intervalo 0-32768.

"+" se toma como signo predeterminado si no se especifica.

  •     /?

   Muestra este mensaje de ayuda.

Ejemplos:

  •     FORFILES /?
  •     FORFILES 
  •     FORFILES /P C:\WINDOWS /S /M DNS*.*
  •     FORFILES /S /M *.txt /C "cmd /c type @file | more"
  •     FORFILES /P C:\ /S /M *.bat
  •     FORFILES /D -30 /M *.exe  /C "cmd /c echo @path 0x09 se cambió hace 30 días"
  •     FORFILES /D 01/01/2001 /C "cmd /c echo @fname es nuevo desde el 1 de enero de 2001"
  •     FORFILES /D +30/8/2011 /C "cmd /c echo @fname es nuevo hoy"
  •     FORFILES /M *.exe /D +1
  •     FORFILES /S /M *.doc /C "cmd /c echo @fsize"
  •     FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

 

 

Para llevar a cabo la tarea de búsqueda siempre es mejor ejecutar la consola de comandos en modo de administrador, ya que así no habrá problemas a la hora de intentar acceder a carpetas y subcarpetas que requieran ese tipo de privilegios.

clip_image004

Abrir consola con funciones de administrador

 

Una vez abierta una consola de comandos en modo administrador se va a realizar una búsqueda, por ejemplo del “notepad.exe” con la siguiente línea:

forfiles /P c:\ /S /M "notepad.exe" /C "cmd /c echo @path"

 

Explicación:

  • “/P” indica la ruta de inicio de la buscada, esta vez se establecerá en C:\
  • “/S” indica que se va a hacer la búsqueda recursiva dentro de los subdirectorios que contiene la ruta de inicio especificada anteriormente.
  • “/M” la máscara de búsqueda, es decir, el fichero a buscar.
  • “/C” comando para que devuelva la ruta (Path).

clip_image006

Resultado de la ejecución con mensajes de error.

 

El resultado como puede verse incluye errores en relación a carpetas en las que no ha podido acceder, al tratarse de directorios que demandan permisos superiores a los que presenta la cuenta de administrador, por ejemplo System.

 

Para eliminar los resultados de error se redirige el “manipulador de archivos” 2 (Error estándar) a nulo. Para hacer esto, se añade “2>null” al final del anterior comando, quedando la siguiente secuencia:

“forfiles /P c:\ /S /M "notepad.exe" /C "cmd /c echo @path" 2>null”

clip_image008

Resultado de la ejecución de la forma deseada

 

Con lo cual ya se habría encontrado las localizaciones donde se encuentra el archivo “notepad.exe”, y como puede apreciarse se encuentra en seis localizaciones distintas.

Para ver que esto funciona correctamente es posible realizar alguna búsqueda tipo, por ejemplo:

 

  • “forfiles /P c:\ /S /M "*.jpg" /C "cmd /c echo @path" 2>null” (Todas las fotografías .jpg)
  • “forfiles /P c:\ /S /M "*.exe" /C "cmd /c echo @path" 2>null” (ejecutables .exe)

Para acabar, recuerda que si quieres aprender mucho más sobre los secretos de los sistemas Microsoft Windows, te recomendamos leer el libro de Sergio de los Santos "Máxima Seguridad en Windows: Secretos Técnicos" , o siempre puedes suscribirte al Canal RSS de Windows Técnico para estar al día de las novedades e información técnica de interés.

image

 

 


Enviado ago 31 2011, 01:46 por Jhonattan Fiestas
Archivado en: ,

Comentarios

Migue escrito re: Windows 7: Búsqueda de ficheros desde la consola de comandos
en 08-31-2011 20:49

Siempre está bien conocer todos los comandos que vienen con el Operativo, pero la motivación del artículo queda un poco 'sosa'.

La falta de conocimiento sobre el propio DIR hace que se complique mucho algo bastante simple para resolver esta tarea:

DIR /b /s /p C:\*calc.exe*

Juan Garrido escrito re: Windows 7: Búsqueda de ficheros desde la consola de comandos
en 09-01-2011 0:19

Miguel, tienes toda la razón del mundo! Pero creo que te equivocas en un par de puntos. Me explico.

Tú comentas que (Y cito..) "La falta de conocimiento sobre el propio DIR hace que se complique mucho algo bastante simple para resolver esta tarea"

DIR /b /s /p C:\*calc.exe*

Efectivamente, tu solución en primera instancia parece mucho más efectiva que la citada en el artículo, pero en el artículo se pone muy CLARITO que el comando dir NO GUARDA la ruta de acceso, sólo muestra la salida (STDOUT). El comando FORFILES es capaz de utilizar variables de entorno, al igual que el comando FOR, por eso se utilizan estos comandos en scripts realizados en BATCH, en detrimento del comando DIR, ya que le dan mayor potencia de automatización frente a comandos ADMINISTRATIVOS, como el comando que citas.

Por ejemplo, si quisiese abrir cada carpeta en donde se encuentra el comando calc.exe, con el comando FORFILES se hace sencillísimo realizarlo en una línea:

forfiles /P c:\ /S /M "calc.exe" /C "cmd.exe /c explorer /select,@path" 2>nul

Salu2!

Añadir un comentario

(requerido)  
(opcional)
(requerido)  
Recordarme
If you can't read this number refresh your screen
Enter the numbers above: