[BATCH]No me Funiona este FOR xD

Iniciado por FranciskoAsdf, 25 Mayo 2009, 04:38 AM

0 Miembros y 1 Visitante están viendo este tema.

FranciskoAsdf

Hola Saludos,

Bueno soy yo de nuevo, siento molestarlos, pero necesito ayuda, los FOR definitivamente no son mi fuerte xD

Bueno en fin mi problema e el siguiente:
Tengo un programa que me genera IDS de hardware, lo uso para genrear el ID de las USB que tengo conectadas mi pc ^^!,  redirigo la salida de la consulta a un archivo txt y hasta ahí todo bien, lo que pasa es que el programa me genera una salida como esta:

USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_PMAP\5B831D000335&0
    Name: Kingston DataTraveler 2.0 USB Device
    Hardware ID's:
        USBSTOR\DiskKingstonDataTraveler_2.0PMAP
        USBSTOR\DiskKingstonDataTraveler_2.0
        USBSTOR\DiskKingston
        USBSTOR\KingstonDataTraveler_2.0P
        KingstonDataTraveler_2.0P
        USBSTOR\GenDisk
        GenDisk
    Compatible ID's:
        USBSTOR\Disk
        USBSTOR\RAW
1 matching device(s) found.

Pero io necesito usa solo la primera línea que viene después de "Hardware ID's:" que es la que me srive para lo que quiero hacer xD, en fin la cosa es que estuve TRATANDO de usar un FOR y llegue hasta el siguiente FOR


for /f "tokens=1" %%L in ('devcon hwids USBSTOR^\^* ^| find /i "USBSTOR\Disk"') do (set usb=%%L)

Pero el problema es que me muestra todas las coincidencias para "USBSTOR\DISK", y obviamente al mostrar el contenido de la variable "%usb%" me va a mostrar "USBSTOR\Disk", aunque si el FOR lo ejecuto desde CMD y no desde un batch, SI va almacenando los datos que necesito, pero me toma el ultimo :xD!!.....
Mi pregunta es simple, como puedo hacer para obtener el contenido de la primera línea después de "Hardware ID's:"? (en batch por supuesto, si es que se puede :X), independiente de que haya mas de una ID de hardware en el archivo? (en el caso de que hubiesen conectadas de usb al PC)....

De ante mano muchas gracias y eh aquí el programa que estoy usando para obtener las ids de hardware.

http://www.4shared.com/file/107573496/c9c9de30/devcon.html

ahi esta el programa por si alguien lo kiere, solo lo decomprimen, trae version para 32 y 64bits

Ayuda de consola del dispositivo:
devcon.exe [-r] [-m:\\<equipo>] <comando> [<arg>...]
-r, si se especifica, reiniciará el equipo cuando se haya completado el comando, si es necesario.
<equipo> es el nombre del equipo de destino.
<comando> es el comando que se va a realizar (vea abajo).
<arg>... es uno o más argumentos, si el comando lo requiere.
Para ver ayuda sobre un comando concreto, escriba: devcon.exe help <comando>
classfilter          Permite la modificación de filtros de clase.
classes              Muestra todas las clases de configuración de dispositivos.
disable              Deshabilita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
driverfiles          Muestra los archivos de controlador instalados para los dispositivos.
drivernodes          Muestra todos los nodos de controlador de dispositivos.
enable               Habilita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
find                 Busca dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
findall              Busca dispositivos, incluyendo aquellos que no están presentes.
help                 Muestra esta información.
hwids                Muestra los Id. de hardware de los dispositivos.
install              Instala manualmente un dispositivo.
listclass            Muestra todos los dispositivos para una clase de configuración.
reboot               Reinicia el equipo local.
remove               Quita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
rescan               Analiza si hay hardware nuevo.
resources            Muestra los recursos de hardware de los dispositivos.
restart              Reinicia los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
stack                Muestra la pila de controladores esperada de los dispositivos.
status               Muestra el estado de ejecución de los dispositivos.
update               Actualiza manualmente un dispositivo.
UpdateNI            Actualiza manualmente un dispositivo sin preguntar al usuario
SetHwID              Agrega, elimina y cambia el orden de los Id. de hardware de los dispositivos enumerados por el raíz.
 

Comandos de DevCon de ejemplo
devcon -m:\\prueba find pci\*

Muestra todos los dispositivos PCI conocidos del equipo prueba. (Si utiliza -m puede especificar un equipo de destino. Debe utilizar comunicación entre procesos (IPC) para tener acceso al equipo.)

devcon -r install %WINDIR%\Inf\Netloop.inf *MSLOOP

Instala una nueva instancia del adaptador de bucle invertido de Microsoft. Creará un nuevo nodo de dispositivo enumerado por el raíz con el que puede instalar un "dispositivo virtual", como el adaptador de bucle invertido. Este comando también reinicia silenciosamente el equipo si se requiere un reinicio.

devcon classes

Muestra todas las clases de instalación conocidas. El resultado contiene el nombre corto no adaptado (por ejemplo, "USB") y el nombre descriptivo (por ejemplo, "Controladoras de bus serie universal").

devcon classfilter upper !filtro1 !filtro2

Elimina los dos filtros especificados.

devcon classfilter lower !filtromalo +filtrobueno

Reemplaza "filtromalo" con "filtrobueno".

devcon driverfiles =ports

Muestra los archivos asociados a cada dispositivo en la clase de instalación ports.

devcon disable *MSLOOP

Deshabilita todos los dispositivos cuyo Id. de hardware termina en "MSLOOP" (incluyendo "*MSLOOP").

devcon drivernodes @ROOT\PCI_HAL\PNP0A03

Muestra todos los controladores compatibles para el dispositivo ROOT\PCI_HAL\PNP0A03. Puede utilizarse para determinar por qué se eligió un archivo de información de dispositivo integral (.inf), en lugar de utilizar un archivo .inf de otro proveedor.

devcon enable '*MSLOOP

Habilita todos los dispositivos cuyo Id. de hardware es "*MSLOOP". La comilla simple indica que se debe tomar literalmente el Id. de hardware (es decir, el asterisco ["*"] es realmente un asterisco; no es un carácter comodín).

devcon find *

Muestra instancias de todos los dispositivos que están presentes en el equipo local.

devcon find pci\*

Muestra todos los dispositivos de interconexión de componentes periféricos (PCI) conocidos que hay en el equipo local (este comando supone que un dispositivo es PCI si su Id. de hardware tiene como prefijo "PCI\").

devcon find =ports *pnp*

Muestra los dispositivos presentes que son miembros de la clase de instalación ports y que contienen "PNP" en su Id. de hardware.

devcon find =ports @root\*

Muestra los dispositivos presentes que son miembros de la clase de instalación ports y que están en la rama "raíz" del árbol de enumeración (el Id. de instancia tiene "root\" como prefijo). Tenga en cuenta que no debe hacer ninguna suposición mediante programación acerca del formato de un Id. de instancia. Para determinar los dispositivos raíz, puede examinar sus bits de estado de dispositivo. Esta característica está incluida en DevCon como ayuda para la depuración.

devcon findall =ports

Muestra los dispositivos "no presentes" y los dispositivos que están presentes para la clase ports. Esto incluye los dispositivos que se han quitado, los dispositivos que se han desplazado de una ranura a otra y, en algunos casos, los dispositivos que se han enumerado de manera diferente debido a un cambio del BIOS.

devcon listclass usb 1394

Muestra todos los dispositivos que están presentes para cada clase indicada (en este caso, USB y 1394).

devcon remove @usb\*

Quita todos los dispositivos USB. Los dispositivos que se quitan se muestran con su estado de eliminación.

devcon rescan

Vuelve a explorar si hay nuevos dispositivos Plug and Play.

devcon resources =ports

Muestra los recursos utilizados por todos los dispositivos de la clase de instalación ports.

devcon restart =net @'ROOT\*MSLOOP\0000

Reinicia el adaptador de bucle invertido ROOT\*MSLOOP\0000. La comilla simple del comando indica que el Id. de instancia se debe tomar literalmente.

devcon hwids=mouse

Muestra todos los Id. de hardware de los dispositivos de la clase mouse del sistema.

devcon sethwid @ROOT\LEGACY_BEEP\0000 := beep

Asigna el Id. de hardware, beep, al dispositivo de beep heredado.

devcon stack =ports

Muestra la pila de controladores esperada para el dispositivo. Esto incluye los filtros superior/inferiores de dispositivo y clase, y el servicio de control.

devcon status @pci\*

Muestra el estado de cada dispositivo presente cuyo Id. de instancia comienza con "pci\".

devcon status @ACPI\PNP0501\1

Muestra el estado de una instancia de dispositivo concreta, en este caso un puerto serie enumerado por Configuración avanzada e interfaz de energía (ACPI).

devcon status @root\rdp_mou\0000

Muestra el estado de Microsoft Terminal Server o el controlador de mouse de Servicios de Terminal Server.

devcon status *PNP05*

Muestra el estado de todos los puertos COM.

devcon update midev.inf *pnp0501

Actualiza todos los dispositivos que coinciden con el ID. de hardware *pnp0501 para que utilicen el mejor controlador de Midev.inf que esté asociado al Id. de hardware *pnp0501.

Nota
Esta actualización obliga a todos los dispositivos a utilizar el controlador de Midev.inf, incluso aunque ya haya una mejor coincidencia en el sistema. Esto es útil cuando desea instalar nuevas versiones de controladores durante el desarrollo antes de obtener una firma. La actualización sólo afecta a los dispositivos que coinciden con el Id. de hardware especificado; no afecta a los dispositivos secundarios. Si el archivo .inf especificado no está firmado, Windows puede mostrar un cuadro de diálogo en el que le pida confirmación para instalar el controlador. Si se requiere un reinicio, se informa de ello y DevCon devuelve un error de nivel 1. Si especifica -r, se realizará un reinicio automáticamente si se requiere uno.

Notas
DevCon devolverá un nivel de error para su uso en secuencias de comandos:
"0" indica un éxito.
"1" indica que se requiere un reinicio.
"2" indica un error.
"3" indica un error de sintaxis.
Si especifica -r y se requiere un reinicio, el reinicio se realizará sin ninguna advertencia después de que se hayan procesado todos los dispositivos.
Si especifica -m:\\equipo y el comando no funciona para un equipo remoto, se informará de un error.
DevCon admite caracteres comodín en los Id. de instancia para mayor comodidad interactiva. No dé por supuesto nada acerca del formato de un Id. de instancia de un equipo a otro y de una versión del sistema operativo a otra.
Volver al principio

--------------------------------------------------------------------------------

La información de este artículo se refiere a:
Microsoft Win32 Device Driver Kit for Windows 2000
Microsoft Windows XP Driver Development Kit
Microsoft Windows NT 2003 Driver Development Kit
Volver al principio
Palabras clave:   kbfile kbhowto KB311272

Volver al principio  ¿Necesita más ayuda?Contactar con un profesional de soporte técnico por correo electrónico, online o por teléfono
Seleccione idioma
AlemánÁrabeChecoChinoEslovenoFrancésGriegoHebreoHolandésHúngaroInglés (US)ItalianoJaponésPolacoPortugués (Brasil)Portugués (Portugal)RomanianRusoTaiwanésTurco   
Herramientas
Imprimir la página
Enviar esta página



¿Necesita más ayuda?
Contactar con un profesional de soporte técnico por correo electrónico, online o por teléfono
Ayuda y soporte Contrato de Servicios
Contáctenos | Condiciones de uso | Marcas registradas | Declaración de privacidad
   
©2009 Microsoft 

esa es la documentacion del programa
Asdf debería ser algún tipo de función.

leogtz

Por ahora solo se me ocurre esto:
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
set /a "contador=0"
for /f "tokens=*" %%_ in ('devcon hwids USBSTOR\* ^| find "USBSTOR\Disk"') do (
echo %%_
set /a "contador+=1"
if !contador! equ 1 (goto:eof)
)


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FranciskoAsdf

#2
definitivamente eres mi heroe Leo Gutierrez. !!!!! ojala me funcione!!!! muchas gracias!!!!!!
Asdf debería ser algún tipo de función.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FranciskoAsdf

disculpa la demora en la respuesta, lo que pasa es que escribo desde un cyber , ya que no tengo internet en mi casa, y SI si me funciono a la perfeccion, pero no me funciona si hay mas de dos ubs conectadas al pc, solo me muestra la primera coincidencia.........


pero en si, me muestra justo el dato que necesito
muchas gracias de nuevo, luego posteare mas usos del programa, y para que necesitaba ese FOR


saludos :D!
Asdf debería ser algún tipo de función.