The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

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

 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)

Por último recordar que si deseas manteneros informado sobre estas otras informaciones en torno a las tecnologías Microsoft no dudes en suscribirte al canal de RSS de Windows Técnico .

 

Comments are closed.