Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: carlitos.dll en 30 Junio 2008, 03:49 am



Título: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 30 Junio 2008, 03:49 am
En la siguiente página está la versión 3.4 que es mucho mejor.

Hola, quisiera solicitar un favor, escribí un code para detectar las unidades pendrive. Y quisiera pedirles por favor, que lo probaran y me dijeran cómo funciona, si es posible, colocar dos pendrives (porque yo tengo sólo 1), para saber si funciona en varias eventos.


Título: Re: Detector unidades Pendrive 0.2
Publicado por: carlitos.dll en 30 Junio 2008, 19:58 pm
¿algún comentario?
Si funciona, lo explico :D


Título: Re: Detector unidades Pendrive 0.3
Publicado por: carlitos.dll en 30 Junio 2008, 21:09 pm
Lo modifiqué, tenía un error, con la ruta dónde escribía, cómo tenía %tmp% y está ruta tiene un espacio (... Configuración local\Temp) se caía cuando leía archivos con el for, ya lo solucioné. modificando:

%tmp%\
por
%HomeDrive%\Docume~1\%UserName%\

es decir, no escribir directamente en la carpeta temporal, sino mejor en la carpeta del usuario.

Estoy trabajando para hacerlo funcionar en windows 9x.



Título: Re: Detector unidades Pendrive 0.5
Publicado por: Ari Slash en 30 Junio 2008, 23:24 pm
esta bueno...

te muestra las unidades removibles, asi uno puede dar a elegir la letra al usuario que use el SCRIPT.........


pero.....yo no tenia ninguna unidad removible puesta, me detecto 2

esas dos me aparecen cuando coloco el celular: una del celular y otra de la tarjeta de memoria...

pero en ese momento no lo tenia conectado.........


salu2



Título: Re: Detector unidades Pendrive 0.5
Publicado por: 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
  1. set objfso = createobject("scripting.filesystemobject")
  2. set discos = objfso.drives
  3. nu=0
  4.  
  5. for each d in discos
  6. if d.driveletter <> "A" and d.drivetype = 1 then
  7. u = u & d.driveletter & ":" & chr(13)
  8. nu = nu+1
  9. end if
  10. next
  11.  
  12. if nu = 0 then
  13. msgbox "No se han deteactado unidades removibles"
  14. else
  15. msgbox "Las unidades removibles son: " & chr(13) & u
  16. end if

Saludos  ;D


Título: Detector unidades Pendrive 1.0
Publicado por: carlitos.dll en 1 Julio 2008, 01:55 am
En la siguiente página está la versión 3.4 que es mucho mejor.

Código:
::Detector de unidades removibles
::v1.0 by CarlitoS.dll

@echo off
set DI=%HomeDrive%\Docume~1\%UserName%
reg.exe export HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices %DI%\rin.0>NUL
type %DI%\rin.0>%DI%\u.0
findstr /n "52,00,65,00,6d,00,6f,00,76,00,61,00,62,00,6c,00,65" %DI%\u.0>%DI%\rin.0

set /a sal=0
set /a wri=0
set /a lin=0
@echo off>%DI%\drv.0
for /f "tokens=*" %%a in (%DI%\u.0) do set ctu=%%a & call :lee
set sal=
set wri=
set lin=

@echo off>%DI%\rin.0
if exist %DI%\rin.0 (del /f /q %DI%\rin.0>NUL)
@echo off>%DI%\u.0
if exist %DI%\u.0 (del /f /q %DI%\u.0>NUL)

set /a non=1
echo Las Unidades removibles actuales son:
call :res
if %non% == 1 (echo ninguna)
set non=

@echo off>%DI%\drv.0
if exist %DI%\drv.0 (del /f /q %DI%\drv.0>NUL)

pause
exit

:res
for /f "tokens=1 delims=," %%c in (%DI%\drv.0) do set drv=%%c & call :res1
goto :Eof
:res1
for /f "tokens=1 delims=:" %%d in ("%drv%") do set drvz=%%d
set drvz=%drvz:~-1%
if exist %drvz%:\ (echo %drvz% & set /a non=0)
goto :eof


:lee
if %wri%==1 (for /f "skip=%sal% tokens=1 delims=:" %%b in (%DI%\rin.0) do set /a number=%%b & call :lee1)
if %wri%==0 (for /f "tokens=1 delims=:" %%b in (%DI%\rin.0) do set /a number=%%b & call :lee1)
set /a lin +=1
goto :eof
:lee1
set /a number -=3
if %lin%==%number% (echo %ctu%>>%DI%\drv.0 & set /a wri=1 & set /a sal +=1)
goto :eof

::CarlitoS.dll


Muchas gracias a todos los que se molestaron en probar y contestar, gracias de verdad.


Título: Re: Detector unidades Pendrive 0.9
Publicado por: Novlucker en 1 Julio 2008, 02:46 am
Ahora si me ha funcionado  :D


Título: Re: Detector unidades Pendrive 0.9
Publicado por: Ari Slash en 1 Julio 2008, 08:36 am
exelente ahi esta bien................

que bueno que te haya resultado

a mi me ha servido para aumentar conocimientos.....

solo te falto:

title Detector de unidades removibles v0.9 by CarlitoS.dll



salu2



Título: Re: Detector unidades Pendrive 0.9
Publicado por: sirdarckcat en 1 Julio 2008, 11:26 am
No se podría hacer (con menos código), un FOR que genere letras (usando debug), y vea si se pudo mover a la unidad indicada con
Código:
%letra%:
?
Esque tu codigo lo veo muy largo, y lo que hizo Novluker en VBS se puede hacer en batch


Título: Re: Detector unidades Pendrive 0.9
Publicado por: Novlucker en 1 Julio 2008, 13:41 pm
Citar
Esque tu codigo lo veo muy largo, y lo que hizo Novluker en VBS se puede hacer en batch

Es que si bien, mi *.vbs se puede pasar a *.bat, y el código sería mucho más corto, creo que el merito de carlitos.dll está en que lo ha hecho en puro batch, con las límitaciones que en ciertas ocasiones puede tener  :P

Saludos


Título: Re: Detector unidades Pendrive 0.9
Publicado por: sirdarckcat en 1 Julio 2008, 13:52 pm
No me entendiste..
se puede pasar tu algoritmo a batch.. no hablo de generar un vbs "on the fly".


Título: Re: Detector unidades Pendrive 0.9
Publicado por: Novlucker en 1 Julio 2008, 14:05 pm
No me entendiste..
se puede pasar tu algoritmo a batch.. no hablo de generar un vbs "on the fly".
  Entonces si no lo había entendido :xD, ahora ya entendí, retiro lo dicho anteriormente  :rolleyes:


Título: Re: Detector unidades Pendrive 0.9
Publicado por: sirdarckcat en 1 Julio 2008, 14:29 pm
aunque dará falsos positivos de unidades creadas de red, y con subst..


Título: Re: Detector unidades Pendrive 0.9
Publicado por: carlitos.dll en 1 Julio 2008, 18:04 pm
Si pudieses escribir lo mismo Sirdarckcat, en menos líneas, igual sería bueno, así todos aprendemos. Leyendo código, aprendes a escribir código.

Es que el algoritmo que hice es largo, se me ocurrió, investigando el registro. Pero si hay alguna llamada al sistema que se pueda hacer, es decir la misma llamada que hace el vbs de novlucker, descubrirla, un rundll32 y algo, sería bueno.
Aunque el algoritmo, no es tan largo, de hecho leo el archivo una sola vez, si te fijas, hay un for que tiene un skip.

Lo otro, a principio del archivo, lo copio a otro con el comando type, para generar un archivo en codificación Windows 1252: Western European, porque el archivo que genera el comando reg.exe lo exporta en formato "Unicode, UTF-16 little endian", y el comando findstr no lee esa codificación. Nota la codificación la averigué con EditPad Lite, y lo de la codificación, se me ocurrió, por descarte.

Suena interesante eso del comando debug.


Título: Re: Detector unidades Pendrive 0.9
Publicado por: sirdarckcat en 1 Julio 2008, 18:29 pm
Desafortunadamente no tengo acceso a ninguna computadora con windows por el momento.. pero de lo que recuerdo sería algo así:
Para generar una letra según su valor ASCII en hexadecimal:
Código:
@echo off
set ASCII=41
(echo e 100 %ASCII% 0a & echo n letra.com & echo rcx & echo 2 & echo q)|debug > NUL
type letra.com | cmd /C "set /P letra="
echo letra

Para el for es un simple FOR que recorre desde el ASCII de A hasta el de Z.. (hay que hacerlo en hex.. pero eso es posible.. solo trabajoso).

Y ya es todo :P


Título: Re: Detector unidades Pendrive 0.9
Publicado por: carlitos.dll en 2 Julio 2008, 05:36 am
Encontré una forma mucho más corta de hacer esto, utilizando el comando diskpart
con la orden list volumes
La única desventaja es que no trabaja en cuenta limitada.

Si tienen windows scripting host habilitado, es mejor el código en vbs de novlucker, aunque eso si, si montas una carpeta como unidad, por ejemplo:

subst L: G:\carpeta_pendrive

y ejecutas el .vbs te muestra dos unidades:
G:
L:

En cambio, el código que hice muestra los volumenes reales, y funciona, en cuenta limitada.






Título: Re: Detector unidades Pendrive 0.9
Publicado por: Novlucker en 2 Julio 2008, 13:43 pm
carlitos.dll, en hora buena, pero... donde ha ido a parar el code para probarlo?  :P

Y antes que nada me quedó una duda.
Citar
La única desventaja es que no trabaja en cuenta limitada
Citar
En cambio, el código que hice muestra los volumenes reales, y funciona, en cuenta limitada.

Citar
aunque eso si, si montas una carpeta como unidad, por ejemplo:
subst L: G:\carpeta_pendrive
y ejecutas el .vbs te muestra dos unidades:
G:
L:

Esto no lo sabía, así que voy a revisar la manera de solucionarlo

Saludos


Título: Re: Detector unidades Pendrive 0.9
Publicado por: carlitos.dll en 2 Julio 2008, 14:10 pm
a lo que me refiero que no trabaja con cuenta limitada es el comando diskpart (si trabajase en todo tipo de cuentas, podría obtener un listado de alli y tratar la información, y el código quedaría mucho más pequeño que el actual), pero como no trabaja en todo evento, me evité el trabajo de escribir un nuevo código, pues el actual, trabaja bien en toda ocasión.

Lo del archivo, está en la página 1, por el medio, esa es la última versión, en el primer post estaba una versión más antigua, la que tenía el error de mostrar unidades cuando no existían y por eso la borré.

Lo del uso de subst para montar una carpeta del pendrive como unidad, es cierto que tu code actual, muestra las unidades virtuales, en cambio el que hice en batch muestra solo los volumenes reales.

Aunque es solo un detalle, pues ¿quién va a montar unidades virtuales de pendrive, cuando son medios transportables? en la práctica tu code es mucho más rápido y eficiente.




Título: Re: Detector unidades Pendrive 0.9
Publicado por: Novlucker en 2 Julio 2008, 15:47 pm
Estuve haciendo pruebas, y efectivamente es como dices... es que las unidades montadas (desde pendrive) las marca como extraíbles  :-\

Citar
Aunque es solo un detalle, pues ¿quién va a montar unidades virtuales de pendrive, cuando son medios transportables? en la práctica tu code es mucho más rápido y eficiente.

Nunca se sabe, siempre aparece alguien  :-X.... por lo que en definitiva, tu code es 100% certero, en cambio el mío, si bien es más corto y rápido, deja un pequeño margen de error, pequeño, pero error al fin  :rolleyes:

Saludos


Título: Re: Detector unidades Pendrive 0.9
Publicado por: carlitos.dll en 2 Julio 2008, 15:58 pm
Hay una forma de hacer lo que tú hiciste en vbs, en batch, sin mostrar las unidades virtuales, pero no funciona en cuenta limitada.

lo encontré hace poco en una página que descubrí sangoogleando:
Código:
dostips.com

Código:
@ECHO OFF
set "drlist="
for /f "tokens=*" %%A in ('fsutil fsinfo drives^|find /V ""') do (
    set "dr=%%A"
    call set "drlist=%%drlist%% %%dr:~-3%%"
)
for %%A in (%drlist%) do fsutil fsinfo drivetype %%A

Usa el comando fsutil, que no trabaja en cuenta limitada, sólo hay que filtrarle para que muestre las unidades removibles.


En todo caso, les postié el code, para saber qué opinan. (Los de habla inglesa tienen habilidad para estas cosas)
Código:
http://www.dostips.com/forum/viewtopic.php?t=284


Título: Re: Detector unidades Pendrive 1.0
Publicado por: carlitos.dll en 6 Julio 2008, 00:02 am
Corregí dos líneas. Finalmente dejé la versión 1.0 en la primera página de este post.


Título: Re: Detector unidades Pendrive 1.0
Publicado por: SmartGenius en 6 Julio 2008, 04:52 am
oye carlitos.dll.... yo habia hecho un code para eso en CM, lo sacaste de alli ??

Código:
@echo off
title Examinador de Unidades
color 0a

:main
cls
echo.
echo Introduzca la Letra de Unidad
echo.
set /p uni="> "
FSUTIL FSINFO DRIVETYPE %uni%:>%temp%\letuni.tmf
for /F "tokens=*" %%a in (%temp%\letuni.tmf) do set p=%%a
if %p:~-4%==ija (goto fija)
if %p:~-4%==ble (goto USB)
if %p:~-4%==ROM (goto CD) else (goto main)

:USB
echo.
echo La unidad es Extraible
pause
exit

:fija
echo La unidad es una Unidad de Disco Duro
echo.
pause
exit

:CD
echo.
echo La unidad es una CD-ROM
echo.
pause
exit

de ahi en adelante se podria hacer algo para hacer mas efectiva la propagacion por USB...

Saludos.


Título: Re: Detector unidades Pendrive 1.0
Publicado por: carlitos.dll en 6 Julio 2008, 04:54 am
Mi code funciona en cuenta limitada, y ese code puse más arriba que es similar al tuyo, lo saqué de d o s t i p s . c o m
Mi code pretende ser una roca como BSD :D
(Está  en la primera página del post)


Título: Re: Detector unidades Pendrive 1.0
Publicado por: SmartGenius en 6 Julio 2008, 05:04 am
ah ok men... no hay problema...

Lo bueno es que funcione en una cuenta limitada, para poder realizar algo mas efectivo...

Saludos.


Título: Detector unidades Pendrive 2.0
Publicado por: carlitos.dll en 10 Julio 2008, 06:15 am
Más adelante está la versión 3.3.
------------------
Código:

::Detector de unidades removibles
::v2.0 by CarlitoS.dll

@echo off
reg.exe export HKLM\SYSTEM\MountedDevices "%tmp%\dev.dat" >nul

set /a non=1
echo LAS UNIDADES REMOVIBLES ACTUALES SON:
for /f "tokens=1 delims==" %%a in ('type "%tmp%\dev.dat" ^| find /i "\\DosDevices\\" ^| sort ^| find /i "53,00,54,00,4f,00,52,00,41"') do call :fil %%a
if %non%==1 (echo Ninguna)

pause
exit

:fil
set dr=%*
set dr=%dr:~-3,1%
call :lab %dr%
goto :eof

:lab
if exist %1:\ (echo %1 & set /a non=0)
goto :eof



Título: Re: Detector unidades Pendrive 2.0
Publicado por: sirdarckcat en 10 Julio 2008, 15:23 pm
No crees que estó es redundante?

reg.exe export HKLM\SYSTEM\MountedDevices "%tmp%\dev.dat" >nul
type "%tmp%\dev.dat"

Hay un handler de archivo virtual a la salida stdout.. :con es para la consola.. si te permite leer y escribir talvez puedas  redirigir el export a stdout y así solo pipe'ar la salida..


Título: Detector unidades Pendrive 3.3
Publicado por: carlitos.dll en 10 Julio 2008, 15:28 pm
En la siguiente página está la versión 3.4 que es la mejor

Código:
:: DETECTOR DE UNIDADES REMOVIBLES
:: v3.3
:: $author CarlitoS.dll

@echo off

set /a non=1
echo LAS UNIDADES REMOVIBLES ACTUALES SON:
for /f "tokens=1 delims=:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find /i "530054004F00520041"') do call :fil %%a
if %non%==1 (echo Ninguna)

pause
exit

:fil
set dr=%*
set dr=%dr:~-1%
call :lab %dr%
goto :eof

:lab
if exist %1:\ (echo %1 & set /a non=0)
goto :eof



Título: Re: Detector unidades Pendrive 3.3
Publicado por: carlitos.dll en 10 Julio 2008, 22:38 pm
Pido disculpas por tantas modificaciones, pero es que luego de un rato se me ocurré otra cosa, y me digo: podría escribir esto para que quedara más rápido.
La versión 3.3 la dejo como versión final, no creo que le haga más modificaciones, pienso que quedó óptimo ese code, y lo más importante es que se puede utilizar bajo cuenta limitada, pues no llama a diskpart o fsutil.


Título: Re: Detector unidades Pendrive 3.3
Publicado por: Novlucker en 11 Julio 2008, 03:22 am
Bueno, lo he probado y no hay quejas  ;D, te ha quedado muy bien.. y sobre todo porque este último code es la tercera parte de largo, de lo que era el primero que publicaste  :P

Saludos


Título: Re: Detector unidades Pendrive 3.3
Publicado por: carlitos.dll en 11 Julio 2008, 06:54 am
Gracias novlucker.

Bueno, ahora una vez termine de leer todas las páginas de manual de los comandos de batch, se viene korn shell (me decidí por este, en vez de perl o python) quiero Unix  :P
No sabré todo de batch, pero ya es suficiente para mi.


Título: Re: Detector unidades Pendrive 3.3
Publicado por: sirdarckcat en 12 Julio 2008, 02:15 am
Que tal  una 3.4?

Borrando..

Código:
set /a non=1
& set /a non=0

y cambiando:

Código:
%non%==1
por
Código:
%ERRORLEVEL%==0

Saludos!!


Título: Detector unidades Pendrive 3.4
Publicado por: carlitos.dll en 12 Julio 2008, 03:31 am
Muchas gracias sirdarkcat. Es increíble que lo que hacía en 40 líneas, se haga en 10.
Código:
:: DETECTOR DE UNIDADES REMOVIBLES v3.4
:: $author CarlitoS.dll

@echo off

echo Unidades removibles montadas:
for /f "tokens=1 delims=:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find /i "530054004F00520041"') do call :fil %%a
pause & exit

:fil
set dr=%*
call :lab %dr:~-1%
goto :eof

:lab
if exist %1:\ (echo %1) else if not %1==0 (echo Ninguna)
goto :eof



Título: Re: Detector unidades Pendrive 3.4
Publicado por: sirdarckcat en 12 Julio 2008, 03:42 am
9, el último goto:eof no es realmente necesario..


Título: Detector unidades Pendrive 3.6
Publicado por: carlitos.dll en 22 Julio 2008, 01:12 am
Código:
::DETECTOR OF REMOVABLE DEVICES [V3.6] author CarlitoS.dll
@echo off & echo Mounted removable devices:
for /f "tokens=1 delims=:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find "530054004F00520041"') do call :fil %%a
pause>NUL & exit
:fil
set dr=%*
set dr=%dr:~-1%
if exist %dr%:\ (echo %dr%) & goto :eof


Título: Re: Detector unidades Pendrive 3.6
Publicado por: sirdarckcat en 22 Julio 2008, 05:33 am
esto deberia funcionar, y queda una linea :S
Código
  1. @for /f "tokens=1 delims=:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find "530054004F00520041"') do if exist %%a:~-1%%:\ (echo %%a%%)


Título: Detector unidades Pendrive 4.0
Publicado por: carlitos.dll en 24 Julio 2008, 00:23 am
Aquí lo dejo en una línea. Si se borran los saltos de línea queda en una línea.
Gracias sirdarckcat por obligarme a exigirme más. Ahora quedó mucho mejor.

Código:
::DETECTOR OF REMOVABLE DEVICES [V4.0] author CarlitoS.dll

@echo off & (
for /f "tokens=1" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find "530054004F00520041"') do (
for /f "tokens=2 delims=\" %%b in ("%%a") do (if exist %%b\ (echo %%b)))
) & pause


Título: Detector unidades Pendrive 4.1
Publicado por: carlitos.dll en 24 Julio 2008, 02:07 am
Ahora acabo de descubrir que se pueden añadir más delimitadores en el for. Así es que ahora quedó más corto todavía.

Código:
::DETECTOR OF REMOVABLE DEVICES [V4.1] author CarlitoS.dll
@echo off & (
for /f "tokens=3 delims=\:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find "530054004F00520041"') do (
if exist %%a:\ (echo %%a))
) & pause


Título: Re: Detector unidades Pendrive 4.1
Publicado por: morenochico en 26 Julio 2008, 02:11 am
Felicidades chicos quedo muy bien, sigan asi.


Título: Detector unidades Pendrive 5.0
Publicado por: carlitos.dll en 26 Julio 2008, 19:41 pm
Dejo la versión 5.0c Final
En este mismo post publiqué la versión 5.0 pero la versión 5.0c tiene un cambio:

Esto, me lo corrigió Rob van der Woude
Código:
if exist %%a:\ (echo %%a)

Código:
dir /a %%a:\ >NUL 2>&1 && echo.%%a:



Título: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 26 Julio 2008, 19:53 pm
Código:

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

@echo off
if "%errorlevel%"=="" goto other

echo Mounted removable devices detected
echo ----------------------------------

ver | findstr "2000 NT" >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
regedit /e "%temp%\devices.dat" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"
for /f "tokens=3 delims=\:" %%a in ('find /i "DosDevices" ^< "%temp%\devices.dat" ^| find /i "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
pause
goto :eof

:other
echo Current batch is not supported in this Operating System version.
exit



Título: Re: Detector unidades Pendrive 5.0c
Publicado por: sirdarckcat en 26 Julio 2008, 20:22 pm
no entiendo para que es ese cambio o.Ô, que tiene de malo if exist..?


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 26 Julio 2008, 20:49 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.



Título: Re: Detector unidades Pendrive 5.0c
Publicado por: Alesteir en 26 Julio 2008, 21:04 pm
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"


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: sirdarckcat en 26 Julio 2008, 21:08 pm
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


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 26 Julio 2008, 21:28 pm

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




Título: Re: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 26 Julio 2008, 21:45 pm
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.



Título: Re: Detector unidades Pendrive 5.0c
Publicado por: sirdarckcat en 26 Julio 2008, 23:07 pm
ah valla, no sabia que dir regresaba errorlevel..


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: carlitos.dll en 11 Agosto 2008, 01:11 am
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
  1. :: DETECTOR OF REMOVABLE DEVICES [V5.0c Final] author Carlitos.dll
  2. :: carlitosdll.blogspot.com
  3. :: Tested in Windows 2000 and XP. Doesn't works in Windows 98 and Me.
  4.  
  5. @ECHO OFF
  6. IF NOT "%OS%"=="Windows_NT" GOTO Other
  7.  
  8. ECHO Mounted removable devices detected
  9. ECHO.----------------------------------
  10.  
  11. VER | FIND "NT" >NUL && GOTO NT2000
  12. VER | FIND "2000" >NUL && GOTO NT2000
  13.  
  14. :XPVISTASEVEN
  15. FOR /F "tokens=3 delims=\:" %%A IN ('REG Query HKLM\SYSTEM\MountedDevices ^| FIND "530054004F00520041"') DO (
  16. DIR /A %%A:\ >NUL 2>&1 && ECHO.%%A:
  17. )
  18. GOTO:EOF
  19.  
  20. :NT2000
  21. START /WAIT REGEDIT /E "%Temp%\devices.dat" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"
  22. 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 (
  23. DIR /A %%A:\ >NUL 2>&1 && ECHO.%%A:
  24. )
  25. DEL /F /Q "%Temp%\devices.dat" >NUL 2>&1
  26. GOTO:EOF
  27.  
  28. :Other
  29. ECHO Current batch is not supported in this Operating System version.
  30.  


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: leogtz en 11 Agosto 2008, 08:14 am
Bueno tambien pongo mi Version de Detector de Unidades 1.1 :) :
Código
  1. @echo off
  2. for /f "tokens=1 skip=1" %%x in ('wmic logicaldisk get caption') do (
  3. for /f "tokens=1" %%c in ('fsutil fsinfo drivetype %%x ^| find /i "Removable"') do (
  4. echo %%c))

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

Saludos.

Edito :

Se puede simplicar a :
Código:
@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


Título: Re: Detector unidades Pendrive 0.5
Publicado por: Nilrac en 3 Diciembre 2009, 04:33 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
  1. set objfso = createobject("scripting.filesystemobject")
  2. set discos = objfso.drives
  3. nu=0
  4.  
  5. for each d in discos
  6. if d.driveletter <> "A" and d.drivetype = 1 then
  7. u = u & d.driveletter & ":" & chr(13)
  8. nu = nu+1
  9. end if
  10. next
  11.  
  12. if nu = 0 then
  13. msgbox "No se han deteactado unidades removibles"
  14. else
  15. msgbox "Las unidades removibles son: " & chr(13) & u
  16. 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 !!!


Título: Re: Detector unidades Pendrive 5.0c
Publicado por: leogtz en 3 Diciembre 2009, 04:36 am
Es un tema muy viejo, leete las reglas, si tienes alguna duda o necesitas ayuda, crea el respectivo mensaje.