Buscar y Listar archivos con cierta extensión en una computadora

Iniciado por shedaro, 22 Septiembre 2012, 16:31 PM

0 Miembros y 2 Visitantes están viendo este tema.

shedaro

Buenas, mi consulta es la siguiente:
EN el trabajo me pidieron realizar una búsqueda en todos los equipos (como 100 Pc's) de cualquier instalador que se pueda encontrar en estos ya que por política todos los instaladores de la empresa se encuentran en un servidor de archivos con acceso solo para sistemas pero se pilló en varios equipo diferentes instaladores y ahora necesito un software que me realice un barrido de todos los archivos .exe .msi .rar, etc que se encuentren en un equipo y su ruta para poder tener este detalle, había pensado en un .bat pero solo llegué hasta la parte de listado de archivos de una partición y me tranque ya que yo necesito el listado de todas las particiones que tenga determinada PC y además necesito filtrar el listado por extensión si alguien tiene idea de como hacer este batch o de algún software que me permita hacer este barrido le agradecería que me pase el dato, de antemano muchas gracias por su ayuda.

Eleкtro

#1
Código (dos) [Seleccionar]
@Echo OFF

REM By Elektro H@cker

:: Extensiones
Set "FileTypes=EXE MSI RAR"

:: Ruta de salida
Set "Folder=%USERPROFILE%\Desktop"

:: Obtenemos las letras de unidades fijas
For /F "tokens=* delims=Unidades:\ " %%@ in ('fsutil fsinfo drives') Do (
Call Set "Drives=%%@"
Call Set "Drives=%%DRIVES::=%%"
Call Set "Drives=%%DRIVES:\=%%"
Call :isHDD?
REM Listar
Call Echo [Unidades] %%HDDs:~1%% | MORE
Call Echo %%HDDs:~1%%>> "%FOLDER%\%COMPUTERNAME% - Unidades.txt"
)

:: Ejecuta las acciones deseadas sobre los archivos de tipo X en las unidades fijas
For %%@ in (%HDDs%) Do (
For %%# in (%FILETYPES%) Do (
PUSHD "%%@:\"
Echo Procesando archivos (.%%#^) en la unidad (%%@:^)...
For /R %%_ in (*%%#) do (
REM Listar
Echo %%_>> "%FOLDER%\%COMPUTERNAME% [%%@] (.%%#).txt"
REM Eliminar
REM Del /F /Q "%%_"
)
)
Echo+
)

:: FIN
Echo Se han procesado todas las unidades. | MORE
Pause&Exit

REM Comprueba si la unidad es un disco fijo
:isHDD?
For %%X in (%DRIVES%) Do (fsutil fsinfo drivetype %%X:\ | Find /I "fija" >NUL && (Call Set "HDDs=%%HDDs%% %%X"))
Goto:EOF











dato000

sin palabras, simplemente genial. En linux lo haria con un simple find, pero esto tiene ciencia, de verdad.

:o :o :o

dejo una captura de como quedo la busqueda:




shedaro

Mil gracias EleKtro H@cker, simplemente espectacular, aunque tengo un problemilla lo ejecuto desde el escritorio y solo me hace el barrido en la partición C, que puedo hacer para que me haga la búsqueda en todas las particiones de la PC. Desde ya mil gracias por tu ayuda.

Eleкtro

#4
Ay, ay, ay!

Al no usar particiones no estoy seguro de si la herramienta fsutil lista las particiones también, por lo que comentas parece que NO  :xD.

No te preocupes, será por comandos...! arreglado:
(Debería funcionar tanto con particiones como unidades)
(Lo del ejemplo de la imagen son unidades)

Código (dos) [Seleccionar]
@Echo OFF

REM Versión 2
REM By Elektro H@cker

:: Extensiones
Set "FileTypes=EXE MSI RAR"

:: Ruta de salida
Set "Folder=%USERPROFILE%\Desktop"

:: Obtenemos las letras de unidades/particiones
For /F "tokens=3,4,5 delims= " %%a in ('echo.list vol ^| DiskPart ^| Find /I "parti"') Do (
REM Listar unidad/partición
Echo %%a:\   Etiqueta: %%b    Formato: %%c| MORE
Echo %%a:\   Etiqueta: %%b    Formato: %%c >> "%FOLDER%\%COMPUTERNAME% - Unidades.txt"

REM Ejecuta las acciones deseadas sobre los archivos de tipo X en la unidad/partición
For %%@ in (%%a) Do (
For %%# in (%FILETYPES%) Do (
PUSHD "%%@:\"
Echo Procesando archivos (.%%#^) en la unidad (%%@:^)...
For /R %%_ in (*%%#) do (
REM Listar archivo
Echo %%_>> "%FOLDER%\%COMPUTERNAME% [%%@] (.%%#).txt"
REM Eliminar archivo
REM DEL /Q /F "%%_"
)
)
Echo+
)
)
:: FIN
Echo Se han procesado todas las unidades. | MORE
Pause&Exit










shedaro


dato000

que significa:


For /F "tokens=3,4,5 delims= " %%a in ('echo.list vol ^| DiskPart ^| Find /I "parti"') Do (


no entiendo la parte tokens, la parte echo.list, y la parte DiskPart



Eleкtro

#7
un token es una palabra delimitada por un espacio a menos que le cambies los delimitadores al FOR (delims=):
Ejemplo:
Esto es elhacker.net
token1=Esto
token2=es
token3=elhacker.net

En fin, la salida del comando tiene 10 tokens  

1       2     3   4             5      6            7   8   9          10  
Volumen 0     C   Windows       NTFS   Partición    698 GB  Correcto   Sistema

El primer token y el segundo no me interesan así que yo lo indico al FOR que quiero empezar a mostrar desde el token "3", el "4", y el "5" (También puedes mostrar del 3 hasta al 5 así: Tokens=3-5), el 6 y el resto de tokens tampoco me interesan así que no los indico.
PD: Ahora que me fijo atentamente, de la manera en que puse los tokens no se verán las etiquetas con espacios en el nombre porque no mostrará el token "6"  xD, un pequeño error, pero bueno, sigo explicando...

echo.list vol ^| DiskPart ^| Find /I "parti"

Envía la palabra "list vol" al comando "diskpart" y se filtran la salida mostrando solamente las lineas de las unidades (que siempre llevan la palabra "partición"):
Cita de: CMD
Microsoft DiskPart versión 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
En el equipo: ELEKTROHACKER

DISKPART>
 Núm Volumen Ltr  Etiqueta     Fs     Tipo        Tamaño   Estado     Info
 ----------- ---  -----------  -----  ----------  -------  ---------  --------
 Volumen 0     C  Windows       NTFS   Partición    698 GB  Correcto   Sistema
 Volumen 1     F   Container   NTFS   Partición   1863 GB  Correcto


DISKPART>

Saludos.