Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: lucaslopezld123 en 23 Diciembre 2012, 19:22 pm



Título: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 19:22 pm
Buen dia Segadorfelix! no se si corresponde en este foro, pero ya que estuviste viendo el codigo de arriba te queria preguntar.
el diguiente pedacito del codigo es para determinar en que unidad se ecuentra mi pendrive

codigo:
for %%i 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 "%%i:\INS\NINFUS" set "DRIVE=%%i:")

anda muy bien, solo que si dejo una compactera abierta o hay una lectora de multimemoria, me tira el error "unidad no esta lista" o algo asi. doy enter y luego sigue.
Con el uso de 2>nul se puede omitir ese error o hay algun otro metodo de deteccion?
 190.8.59.170
Segadorfelix

 Conectado

Mensajes: 81




 
   Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #231 en: Hoy a las 15:13 »

Pues, lucaslopezld123 creo que se puede, pero me parece mas adecuado utilizar este metodo, oculta cualquier tipo de salida

Código:
for %%i 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 "%%i:\INS\NINFUS" set "DRIVE=%%i:")>NUL 2>&1
Saludos


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 19:25 pm
probe con
for %%i 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 "%%i:\INS\NINFUS" set "DRIVE=%%i:")>NUL 2>&1

pero con la compactera abierta dice "No hay disco en la unidad, Inserte un disco en la unidad"

alguna otra forma de hacerlo?
necesito detectar cual es la letra de unidad de mi pendrive independientemente si las compateras estan abiertas o hay lectores de multimemorias vacios


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 23 Diciembre 2012, 19:56 pm
probe con
for %%i 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 "%%i:\INS\NINFUS" set "DRIVE=%%i:")>NUL 2>&1

pero con la compactera abierta dice "No hay disco en la unidad, Inserte un disco en la unidad"

alguna otra forma de hacerlo?
necesito detectar cual es la letra de unidad de mi pendrive independientemente si las compateras estan abiertas o hay lectores de multimemorias vacios
prueba
Código:
for %%i 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 "%%i:\INS\NINFUS" set "DRIVE=%%i:">NUL 2>&1)
Aunque no se si funcione(no tengo disquetera para probar).


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 22:32 pm
chan! falla
sino algun otro metodo para detectar cual es la letra de mi unidad de pendrive, o sea que solo liste las unidades activas y luego las compare para ver si coinciden y de esa manera determine la unidad correcta evitando errores
como seria un codigo asi?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 23 Diciembre 2012, 22:39 pm
De que sirve el "INS\NINFUS"?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 22:43 pm
si abris la compactera  lo podes probar facilmente, ahora mismo estoy haciendo eso pero no hay caso con los >null no sale...


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 22:48 pm
asi tampoco..... le di vuelta el orden de las letras pensando que si buscaba al reves tengo mas chances ya que el pendrive siempre se ubica ultimo en la lista de unidades

for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (if exist "%%i:\INS\NINFUS" set "DRIVE=%%i:")


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 24 Diciembre 2012, 00:14 am
Revisa el valor de errorlevel después del error.
Así
Código:
echo %errorlevel%
para omitir el error se podría hacer esto:
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (if exist "%%i:\INS\NINFUS" echo D | set "DRIVE=%%i:")
No se si funcione.


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 24 Diciembre 2012, 00:26 am
errorlevel me dice 0 (cero)
any other?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 24 Diciembre 2012, 00:30 am
este script
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (if exist "%%i:\INS\NINFUS" echo D | set "DRIVE=%%i:")
Funciona o no?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 24 Diciembre 2012, 00:36 am
funciona pero si dejo la compactera abierta tira error
busco suprimir el error
o sino hacer que busque solo en las unidades que estan listas


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 24 Diciembre 2012, 00:38 am
no no anda
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (if exist "%%i:\INS\NINFUS" echo D | set "DRIVE=%%i:")

le pongo

echo %drive%
y no me da ningun valor


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 24 Diciembre 2012, 00:41 am
funciona pero si dejo la compactera abierta tira error
busco suprimir el error
o sino hacer que busque solo en las unidades que estan listas
No dejes la compactera abierta y listo :P

Hablando enserio, Como sale el error?, crea una pausa?
Citar
no no anda
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (if exist "%%i:\INS\NINFUS" echo D | set "DRIVE=%%i:")

le pongo

echo %drive%
y no me da ningun valor
Si no tienes nada dentro, no te dará ningún valor(aparte es un código experimental para evitar la pausa)


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 24 Diciembre 2012, 00:53 am
el tema es asi:
yo pongo un pendrive con un programa.exe y un lanzador.cmd lo tiene que llamar desde la pc
ese .cmd tiene que averiguar que letra tiene asignada el pendrive
en la mayoria de las pc anda de lujo, excepto cuando esta una compactera abierta o la pc tiene lector de momorias
alli sale un cartel adicional diciendo
"No hay disco en la unidad, Inserte un disco en la unidad"
aceptar  cancelar  continuar

necesito que el lanzador.cmd omita ese error o que liste las unidades que si estan listas y determine por comparacion (ins/ninfus) cual es la variable %drive%

me explico?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 24 Diciembre 2012, 01:07 am
lo mismo ocurre con este codigo

@echo off
if exist "D:\ins" set drive=D
if exist "E:\ins" set drive=E
if exist "F:\ins" set drive=F
if exist "G:\ins" set drive=G
if exist "H:\ins" set drive=H
if exist "I:\ins" set drive=I
if exist "J:\ins" set drive=J
if exist "K:\ins" set drive=K
if exist "L:\ins" set drive=L
if exist "M:\ins" set drive=M
if exist "N:\ins" set drive=N
if exist "O:\ins" set drive=O
if exist "P:\ins" set drive=P
if exist "Q:\ins" set drive=Q
if exist "R:\ins" set drive=R
if exist "S:\ins" set drive=S
if exist "T:\ins" set drive=T
if exist "U:\ins" set drive=U
if exist "V:\ins" set drive=V
if exist "W:\ins" set drive=W
if exist "X:\ins" set drive=X
if exist "Y:\ins" set drive=Y
if exist "Z:\ins" set drive=X
echo %drive%
pause

a la primera unidad que no este lista salta el error
"No hay disco en la unidad, Inserte un disco en la unidad"
aceptar  cancelar  continuar

tal vez no es la forma correcta de buscar
hay alguna otra?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 24 Diciembre 2012, 01:36 am
El mensaje aparece fuera del cmd?

encontré información que podría ser útil
http://es.kioskea.net/forum/affich-225390-como-quitar-mensaje-no-hay-disco-en-la-unidad
con cmd se puede editar el registro.


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 24 Diciembre 2012, 05:13 am
Otro link
http://www.youtube.com/watch?v=9ARHZgbsxeU


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Eleкtro en 24 Diciembre 2012, 07:25 am
@lucaslopezld123

Tienes que entender como funciona Windows,
El error no lo puedes suprimir desde Batch, porque no es un error, ni tampoco tiene que ver con Batch,
Es un aviso de Windows cuando intentas acceder a un dispositivo que no se encuentra disponible.

Para evitar el aviso de Windows, lo que debes hacer es filtrar (es decir, NO intentar procesar) las unidades de disquetera y las de CD/DVD-ROM.

Puedes usar este ejemplo para tus intenciones haciendo unas pequeña modificaciones en el código > [BATCH] copiar y ocultar virus en unidades extraibles (http://foro.elhacker.net/scripting/batch_copiar_y_ocultar_virus_en_unidades_extraibles-t379139.0.html;msg1812232#msg1812232)

Código:
Find /I "extra"
por:
Código:
Find /I "ROM"

Eso te servirá para las unidades ópticas, pero el equipo reconoce la disquetera como una unidad "extraíble", osea, se reconoce como si fuera un usb o un disco duro extraíble, así que lo único que puedes hacer es eliminar la letra "A:\" del FOR, o deshabilitar temporálmente el dispositivo "A:\" en el equipo.

Saludos.


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 25 Diciembre 2012, 22:53 pm
logre hacerlo satisfactoriamente modificando el registro de windows
ahora tengo la siguiente duda, como quedaria escrito el siguiente archivo .reg
si lo quiero agregar desde un .bat?

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows]
"ErrorMode"=dword:00000002

se que este no es el foro de eso, pero si son tan amables me pueden traducir a batch?


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Segadorfelix en 25 Diciembre 2012, 23:23 pm
El equivalente seria este:
Código:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Windows /v ErrorMode /t REG_DWORD /d 00000002 /f


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: lucaslopezld123 en 25 Diciembre 2012, 23:28 pm
El equivalente seria este:
Código:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Windows /v ErrorMode /t REG_DWORD /d 00000002 /f

muchisimas gracias!


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Eleкtro en 26 Diciembre 2012, 04:21 am
Usa más el buscador del foro,
Tienes un programa dedicado exclusívamente a convertir scripts REG a ordenes BATCH:

> [BATCH/RUBY] [APORTE] REG2BAT (Convierte archivos REG a BAT) (http://foro.elhacker.net/scripting/batchruby_aporte_reg2bat_convierte_archivos_reg_a_bat-t357848.0.html)

(http://img10.imageshack.us/img10/6448/prtscrcapturexf.jpg)

Código:
Reg2bat.exe "Archivo.reg"

Saludos


Título: Re: Detectar correctamente unidad de un pendrive
Publicado por: Donmanux en 17 Junio 2013, 01:41 am
En este link encontré informacion útil para este tema:
http://stackoverflow.com/questions/16193678/batch-file-detects-drive-letter-of-the-usb-flash-drive-its-on-then-opens-cmd-pr (http://stackoverflow.com/questions/16193678/batch-file-detects-drive-letter-of-the-usb-flash-drive-its-on-then-opens-cmd-pr)

en resumen es esto:

@echo off
set drive=%~d0
echo %drive%
pause