Board logo

标题: [部分已结]有否类似 findcd 的 U盘盘符识别程序 findusb ? [打印本页]

作者: hxj     时间: 2006-4-4 15:57    标题: [部分已结]有否类似 findcd 的 U盘盘符识别程序 findusb ?

有否类似 findcd 的 U盘盘符识别程序 findusb  ?

为了在批处理中能搜索 U盘盘符,有否像 光盘盘符识别程序 findcd.exe这样的U盘盘符识别程序 findusb.exe ?
如没有现成的程序,那位高手能编写具有这一功能的批处理也行 !

[ Last edited by hxj on 2006-4-15 at 04:49 ]
作者: 3742668     时间: 2006-4-4 17:30

@echo off
echo 盘符      可用空间
wmic logicaldisk where Description="可移动磁盘" get DeviceID,FreeSpace | find /v "DeviceID"
wmic logicaldisk where DriveType="2" get DeviceID,FreeSpace | find /v "DeviceID"
pause>nul
看看是不是类似的效果?如果把"可移动磁盘"改为"CD-ROM 磁盘"则可以返回当前的光驱盘符。
其他事项见我的签名。
作者: Climbing     时间: 2006-4-4 22:24
楼上的,顺便请教一下,如何用wmic在另一台机器上执行一条命令?
作者: 3742668     时间: 2006-4-4 23:22
wmic /node:对方IP /user:username /password:yourpassword
在SP2环境中测试能连接上,但是似乎权限不够,亦或是对方未开启RPC。也许是用的空密码登陆的缘故吧,没条件,也懒得测试找原因了。
作者: hxj     时间: 2006-4-5 01:50
感谢3742668:
你写的批处理能达到目的!
你干脆把它编成一个应用程序findusb.exe ,应当还是很有实用价值的!
作者: hxj     时间: 2006-4-5 04:11
再向3742668求教:

我把“FreeSpace”省去,只显示了U盘的盘符 “DeviceID”,但怎样才能把 显示的 “DeviceID”转变成批处理中能用的环境变量?
作者: 3742668     时间: 2006-4-5 10:00
用for包起来吧。。
for /f %%i in ('"wmic logicaldisk where DriveType="2" get DeviceID |find /v "DeviceID""') do set mydrv=%%i
看看中不中,未经测试。
作者: hxj     时间: 2006-4-5 10:37


  Quote:
Originally posted by 3742668 at 2006-4-5 10:00 AM:
用for包起来吧。。
for /f %%i in ('"wmic logicaldisk where DriveType="2" get DeviceID |find /v "DeviceID""') do set mydrv=%%i
看看中不中..

测试了,结果盘符不对,将我要解到U盘(I:)的文件解到当前盘(G:)去了。
之前,我自己胡编了一个到是能行,但总觉得不好,请你指教

usb.bat :

@echo off
path %SystemRoot%\system32\wbem;%SystemRoot%\system32\
wmic logicaldisk where Description="可移动磁盘" get DeviceID | find /v "DeviceID">a.txt
for /F "tokens=1" %%I in (a.txt) DO set USB=%%I
del a.txt
dosimg KV.img %USB%\ /s>nul
exit

但上面的批处理单独使用可以,用我的主批处理用call 调用就出错,不知为什么

最后用  start /wait /min usb.bat 到是成功了。我是DOS菜鸟,这样的语句是瞎凑的,我自己也搞不懂!
作者: 3742668     时间: 2006-4-5 10:49
那这句呢?
for /f %%i in ('"wmic logicaldisk where Description="可移动磁盘" get DeviceID |find /v "DeviceID""') do set mydrv=%%i
也许你的U盘的类型不是2吧,我的光盘类型为3,U盘类型为2,现在不在手边,所以无法测试。你可以把前面的那句的DriveType="2"分别改成1,2,3,4,5等等测试了看看。
你的那个批处理可以把主批处理也贴上来,顺便说明一下环境包括目录。
作者: hxj     时间: 2006-4-5 11:00
:3制作江民DOS杀毒闪盘
REM 制作江民 DOS 杀毒闪盘
path %Programfiles%\winrar
start /wait /min winrar e -p88888888 KV.pak kv.iso dosimg.exe -o+
start /wait /min winrar e kv.iso ezboot\kv.img -o+
cls
echo.
echo.
echo.
echo.
echo Now laoding databank into U disk, please wait......
start /wait /min usb.bat  
del/q a.txt
del/q kv.i*
del/q d*.exe
GOTO BACKTOMENU

WinXP系统,当前目录 g:\dosav\kv\

你的比较简洁,我继续试!
作者: hxj     时间: 2006-4-5 11:19
好了!用你第一个批处理,PATH中加入%SystemRoot%\system32\;%SystemRoot%\system32\wbem就成功了!

非常感谢你这位高手的指教,受益匪浅!!
作者: hxj     时间: 2006-4-15 04:47
此问题本来已解决,但现在碰到需要DOS7.1下识别U盘盘符问题,看来3742668的方法只能手在Windows下,在纯DOS下有否办法 ?

[ Last edited by hxj on 2006-4-15 at 04:48 ]
作者: buddiyar     时间: 2006-7-21 21:33
wmic logicaldisk where Description="可移动磁盘" get DeviceID,FreeSpace | find /v "DeviceID"

这个wmic是内部命令么
怎么以前都没听说过啊
而且在我的机子上用wmic /? 也搜不到相关帮助信息哦
作者: willsort     时间: 2006-7-21 21:56
Re buddiyar:

      wmic 显然不是内部命令,但它是WinXP/03的缺省安装组件,首次运行wmic时,会提示进行安装以完成配置,以后可以在cmd或批处理中直接使用。请参考:

[1] WMI 命令行
http://www.cn-dos.net/forum/viewthread.php?tid=19738#pid115977
作者: gmy     时间: 2006-9-11 21:06
“可移动磁盘”的字符判断没有考虑到USB-HDD(本地硬盘)的情况。
作者: electronixtar     时间: 2006-9-11 21:12
提示:Home版XP无wmic~~~
作者: doit2004     时间: 2006-10-9 04:13


  Quote:
Originally posted by willsort at 2006-7-21 21:56:
Re buddiyar:

      wmic 显然不是内部命令,但它是WinXP/03的缺省安装组件,首次运行wmic时,会提示进行安装以完成配置,以后可以在cmd或批处理中直接使 ...

那在NT系统下该怎么办呢?
作者: brglng     时间: 2006-10-9 10:07
如果在纯DOS下该怎么完成呢?
作者: lyncom     时间: 2007-5-15 16:52
有没有关于将光驱映射为%cdrom%的内容
作者: axi     时间: 2007-5-15 21:50


  Quote:
Originally posted by gmy at 2006-9-11 21:06:
“可移动磁盘”的字符判断没有考虑到USB-HDD(本地硬盘)的情况。

由于USB-HDD与硬盘均被检测为本地固定磁盘,因此很难用这种方式来判断,但可以考虑以判断新增驱动器的方式,如下VBS:
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery ("Select * From __InstanceOperationEvent Within 5 Where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")
Do While True
    Set objEvent = colEvents.NextEvent
    If objEvent.TargetInstance.DriveType = 3 Then
        If objEvent.Path_.Class = "__InstanceCreationEvent" Then
        newdri = objEvent.TargetInstance.DeviceId
                Wscript.Echo "新增磁盘盘符为: " & newdri
        End If
    End If
Loop

作者: lmm333     时间: 2007-10-23 09:39
我想制作一个批处理,当有U盘接入系统时,能自动检测到U盘盘符并自动进行删除或复制或备份的工作,请高手示范下脚本如何编写。
以前自己写的比较简单且比较死板,只能固定在某个U盘盘符,且需要手动敲键,同时接入两个时就会出错,因为接入时总是有先有后,系统显示盘符也是有先有后的,所以经常只能对先接入的那个完成操作……
作者: dooomer     时间: 2007-10-23 16:06
楼上的这个批处理是准备时时刻刻都运行并检测U盘吗?

还是准备放到U盘上,作为U盘 autorun的程序?

后者可能好办一些,可以用cd得到其路径,然后处理一下,分离盘符出来。
作者: lmm333     时间: 2007-10-23 16:24
不是啊,想做成一个批处理脚本,需要使用到U盘时,就双击运行,因为工作要测试很多U盘,经常做大批量重复的工作,比如拷入100M到1000M的测试文件,测试完成后再删除……很累很无聊……想做成批处理全自动运行,我要做的就只是插拔U盘就好了,不用再点击鼠标或是键盘……
作者: fei009     时间: 2008-8-19 16:18    标题: 问一下,3742668,能解释一下你2楼代码的意思吗?

另外检测U盘盘符的原理是什么,仅从盘的名称“可移动磁盘”吗?
另外,DriveType是什么意思?
作者: HAT     时间: 2008-8-19 17:24
DriveType表示磁盘类型
0:"Unknown"
1:"可移动磁盘"
2:"本地磁盘"
3:"Network Disk或移动硬盘"
4:"CD-ROM"
5:"RamDisk 内存盘"
作者: fei009     时间: 2008-8-20 11:23
获得U盘盘符能不用wmic 吗?就用内部命令。
作者: popo77     时间: 2010-3-2 17:27
网上收索了很多,好像都不完美.
有devcon,wmic,vbs

请问有用dos的命令就可以实现的如下功能吗?
自动识别U盘,获得盘符,删除U盘,重新识别U盘.