Detector unidades Pendrive 5.0c

Iniciado por carlitos.dll, 30 Junio 2008, 03:49 AM

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

sirdarckcat

no entiendo para que es ese cambio o.Ô, que tiene de malo if exist..?

carlitos.dll

Cita de: sirdarckcat en 26 Julio 2008, 20:22 PM
no entiendo para que es ese cambio o.Ô, que tiene de malo if exist..?

Me dijo que le aparecía una ventana dónde tenía que hacer clic en Cancelar, Reintentar, Continuar.

Yo en un computador de escritorio puse if exist a:\ echo A
y no aparecía ningún mensaje.

Pero eso mismo, lo puse en un notebook.
if exist a:\ echo A
sale una ventana diciendo en el título: Windows - No hay disco. En el mensaje dice: Exception Processing Message c0000013 Parameters 75b1bf9c 4 751bf9c 751bb9c

Entonces entendí que lo mismo le aparecía a él, con los pendrives respectivamente.

Y su solución funciona, porque si en el mismo notebook, coloco
dir /a a:\ >NUL
Me dice en consola: El dispositivo no está listo.


Alesteir

Hace mucho circulo un script para matar el autorun de las unidades /creo que se llamaba autorunkiller, despues busco el code y lo pongo para que vean un paralelo, tenia  un funcionamiento similar al que has usado tu carlitos, pero tu idea es muy buena y el code te ha quedado muy bien"

sirdarckcat

ahh ese error es en las computadoras con diskette no?
de todas formas.. estás seguro que eso funciona? porque ya no estás poniendo ninguna condición

carlitos.dll

#44

Si funciona, la condición es el %errorlevel%

dir /a unidad:\ >NUL
rem redirigiendo la salida a NUL
2 >&1
rem redirigiendo errores e información de errores a NUL
&& echo.unidad:
si se completó el comando dir /a sin errores devuelve 0 en %errorlevel% sino 1
y ese && significa que efectúa el comando solo si el anterior tuvo éxito, es decir si en este caso dir /a devolvió %errorlevel% igual a 0.

Buena información de redirección en:
http://www.ss64.com/ntsyntax/redirection.html
y de condiciones en:
http://www.ss64.com/ntsyntax/conditional.html



carlitos.dll

Con un programa llamado timethis.exe calculé el tiempo que se demoraba (en mi máquina claro) la versión 1.0 del presente script y la 5.0

La 1.0 se demoró 0.625 segundos.
La 5.0 se demoró 0.265 segundos.

Ahora ne queda claro que más líneas no significa mejor programación.


sirdarckcat

ah valla, no sabia que dir regresaba errorlevel..

carlitos.dll

#47
Modifiqué el código según lo adaptó RobVanDerWoude
En dicha página para que funcione, se debe reemplazar ˆ por ^ y ejecutarlo desde cmd.exe
http://www.robvanderwoude.com/3rdpartybatchfiles.html#Removables

Código (dos) [Seleccionar]

:: DETECTOR OF REMOVABLE DEVICES [V5.0c Final] author Carlitos.dll
:: carlitosdll.blogspot.com
:: Tested in Windows 2000 and XP. Doesn't works in Windows 98 and Me.

@ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Other

ECHO Mounted removable devices detected
ECHO.----------------------------------

VER | FIND "NT" >NUL && GOTO NT2000
VER | FIND "2000" >NUL && GOTO NT2000

:XPVISTASEVEN
FOR /F "tokens=3 delims=\:" %%A IN ('REG Query HKLM\SYSTEM\MountedDevices ^| FIND "530054004F00520041"') DO (
DIR /A %%A:\ >NUL 2>&1 && ECHO.%%A:
)
PAUSE
GOTO:EOF

:NT2000
START /WAIT REGEDIT /E "%Temp%\devices.dat" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"
FOR /F "tokens=3 delims=\:" %%A IN ('TYPE "%Temp%\devices.dat" ^| FINDSTR /R /B /I /C:"\"\\\\DosDevices\\\\[A-Z]:\"=hex:.*,53,00,54,00,4f,00,52,00,41"') DO (
DIR /A %%A:\ >NUL 2>&1 && ECHO.%%A:
)
DEL /F /Q "%Temp%\devices.dat" >NUL 2>&1
PAUSE
GOTO:EOF

:Other
ECHO Current batch is not supported in this Operating System version.


leogtz

#48
Bueno tambien pongo mi Version de Detector de Unidades 1.1 :) :
Código (dos) [Seleccionar]

@echo off
for /f "tokens=1 skip=1" %%x in ('wmic logicaldisk get caption') do (
for /f "tokens=1" %%c in ('fsutil fsinfo drivetype %%x ^| find /i "Removable"') do (
echo %%c))


Con dos memorias conectadas me funciona bien, si les salta un error me dicen.

Saludos.

Edito :

Se puede simplicar a :
@echo off
for /f "tokens=1 skip=1" %%x in ('wmic logicaldisk get caption') do (for /f "tokens=1" %%c in ('fsutil fsinfo drivetype %%x ^| find /i "Removable"') do (echo %%c))
pause>nul & goto:eof

Código (perl) [Seleccionar]

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

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

Nilrac

Cita de: Novlucker en  1 Julio 2008, 00:32 AM
Lamento informar que a mi me detecta G:, pero G ni siquiera existe en este momento.....  :-\

Es por eso que siempre me decanto por *.vbs  ;D

Código (vb) [Seleccionar]
set objfso = createobject("scripting.filesystemobject")
set discos = objfso.drives
nu=0

for each d in discos
if d.driveletter <> "A" and d.drivetype = 1 then
u = u & d.driveletter & ":" & chr(13)
nu = nu+1
end if
next

if nu = 0 then
msgbox "No se han deteactado unidades removibles"
else
msgbox "Las unidades removibles son: " & chr(13) & u
end if


Saludos  ;D

Hola !
Soy nuevo en el foro

Esta perfecto ese script, pero serias tan amable de agregarle el comando para que detecte las particiones como :
C:
D:

Gracias !!!