我正在尝试编写批处理脚本来检测USB驱动器,如果已插入, 例如,将 c:\ test \ big.txt 复制到USB驱动器,然后循环以检测另一个闪存驱动器。
答案 0 :(得分:8)
@echo off
for %%d in (D: E: F: G: H: I: etc...) do (
if exist %%d\nul (
echo USB at drive %%d connected
)
)
编辑:以下是正确的方法:
@echo off
for /F "tokens=1*" %%a in ('fsutil fsinfo drives') do (
for %%c in (%%b) do (
for /F "tokens=3" %%d in ('fsutil fsinfo drivetype %%c') do (
if %%d equ Removable (
echo Drive %%c is Removable (USB^)
)
)
)
)
答案 1 :(得分:1)
上面的代码有一个缺陷,在以下代码中已经注意到了 该代码在XP中工作,如果没有USB设备,则为您提供USB驱动器号 是连接的,它告诉你了!
:: SUCCESS @ 2013年10月12日凌晨2:39 !!! :: BOBBY GOREJA改进
@echo off
set usbdrv=
set usb=No
:: Above two lines on 12 Oct 2013
fsutil fsinfo drives >de
type de | find "Drives:" /v >dlist
for /F "tokens=1" %%c in ('type dlist') do (
for /F "tokens=3" %%d in ('fsutil fsinfo drivetype %%c') do (
rem echo Token is %%d
if %%d equ Removable (
echo Drive %%c is Removable (USB^)
set usbletter=%%c
set usb=Yes
echo USB drive letter is %usbletter%
rem set usbdrv = %%c <<< this does NOT work!
rem echo USB1 drive letter is %usbdrv%
)
)
)
del de
del dlist
echo REPEAT:Device at %usbletter%
if "%usb%"=="No" echo No USB Device Connected .
set usb=
答案 2 :(得分:1)
我知道这已经老了但是......
@echo off
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
copy c:\test\big.txt %%i
)
)
这假设当然插入了两个驱动器。
答案 3 :(得分:0)
@Aacini我今天对这种情况没有很好的设置,所以我尝试找到我的USB网络摄像头。我使用devmgmt.msc
和devcon listclasses
来确定连接的USB相机所具有的成员资格。经过几次测试后,我到达了devcon find =Image USB\*
。我认为对USB大容量存储设备做同样的操作非常简单,所以我尝试了devcon find =Volume
(每个列表类)。不幸的是,这会转储出一个GUID,然后你必须映射到一个驱动器号。粗略地看一眼this溢出建议您可以使用reg query
从注册表中执行此操作,但此时似乎fsutil
最适合您的情况。