Detectar correctamente unidad de un pendrive

Iniciado por lucaslopezld123, 23 Diciembre 2012, 19:22 PM

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

lucaslopezld123

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

lucaslopezld123

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

Segadorfelix

Cita de: 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
No dejes la compactera abierta y listo :P


Hablando enserio, Como sale el error?, crea una pausa?
Citarno 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)

lucaslopezld123

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?

lucaslopezld123

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?

Segadorfelix

#15
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.


Eleкtro

@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

Find /I "extra"
por:
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.








lucaslopezld123

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?

Segadorfelix

El equivalente seria este:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Windows /v ErrorMode /t REG_DWORD /d 00000002 /f