Board logo

标题: [文件操作] 要怎么获取U盘的盘符? [打印本页]

作者: sylovanas    时间: 2008-12-1 21:29     标题: 要怎么获取U盘的盘符?

本帖最后由 pcl_test 于 2017-4-1 16:49 编辑

要求是这样

不可用fsutil,因为win 2000没有
vbs可,但尽量避免
wmic也不可,因为win 2000没有
不能用中文字串判断是否为U盘,因为有可能会用到E文系统

目前由抓取注册表和SED来提取过滤光盘
但U盘没有比较好的方式

这边附上自己做的抓光盘並去除的批处,作的不好献丑了
  1. IF EXIST %SYSTEM%\MOUNTVOL.EXE %SYSTEM%\MOUNTVOL.EXE|SED -r "/^ +(.):\\$/!d;s//\1/" >.\TEMP\TEMP00
  2. IF NOT EXIST .\TEMP\TEMP00 FOR %%A IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO ECHO %%A>>.\TEMP\TEMP00
  3. SWREG EXPORT "HKLM\SYSTEM\MOUNTEDDEVICES" ".\TEMP\TEMP01" /NT4 >NUL 2>&1
  4. SED "s/hex/hex\(1\)/Ig;s/SYSTEM/software\\efix/I" .\TEMP\TEMP01>.\TEMP\TEMP02
  5. GREP -iq "EFix" .\TEMP\TEMP02 && SWREG IMPORT .\TEMP\TEMP02 >NUL 2>&1
  6. SWREG QUERY "HKLM\SOFTWARE\EFIX\MOUNTEDDEVICES"|SED -r "/^   \\DosDevices\\(.):\t.*cdrom.*$/I!d;s//\1/">.\TEMP\TEMP03
  7. IF EXIST .\DAT\CDROM.DAT DEL .\DAT\CDROM.DAT >NUL 2>&1
  8. GREP -Fvif .\TEMP\TEMP03 .\TEMP\TEMP00 >.\DAT\CDROM.DAT
  9. DEL .\TEMP\TEMP0? /Q >NUL 2>&1
复制代码
[ 本帖最后由 sylovanas 于 2008-12-1 21:34 编辑 ]
作者: tireless    时间: 2008-12-1 22:11

谁能告诉我 以最后一个盘符作为 U 盘盘符 这个方法会不会出错?
作者: Batcher    时间: 2008-12-1 22:15

  1. @echo off
  2. for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  3.   for /f %%h in ('fsutil fsinfo drivetype %%a:^|findstr "Removable 可移动"') do (
  4.     echo %%h
  5.   )
  6. )
复制代码

作者: Batcher    时间: 2008-12-1 22:15     标题: 回复 2楼 的帖子

可能出错。
作者: tireless    时间: 2008-12-1 22:23

原帖由 Batcher 于 2008-12-1 22:15 发表
可能出错。
什么情况下会出错?
作者: fastslz    时间: 2008-12-1 22:30

看看这个
http://bbs.bathome.net/viewthread.php?tid=573&highlight=

  1. devcon.exe disable  USB\Class_08
  2. devcon.exe enable USB\Class_08
复制代码

作者: namejm    时间: 2008-12-1 23:48

原帖由 tireless 于 2008-12-1 22:11 发表
谁能告诉我 以最后一个盘符作为 U 盘盘符 这个方法会不会出错?

  目前的机器,有两个以上USB接口的应该是主流了,如果有人除了接U盘外,还接了移动硬盘呢?另外,虚拟光驱也不是什么新鲜事了,那些ISO文件在使用的时候大都得占用一个分区号吧?这些情况都有可能造成最后一个盘符不一定就是U盘的盘符。
  还有一种比较BT的情况:一个U盘分了N个区,嘿嘿,奸笑ing。
作者: sylovanas    时间: 2008-12-2 01:00     标题: 回复 3楼 的帖子

fsutil不行,原因已经有提过了
win2000是主要问题所在

第三方工具是能避尽量避
不然用Fi就可以了。
作者: fastslz    时间: 2008-12-3 10:28

VBScript WMI 对象方法就不说了2000不支持
VBScript Scripting.FileSystemObject 对象方法

  1. Set Fso = CreateObject("Scripting.FileSystemObject")
  2. Set B = Fso.Drives
  3. For Each A in B
  4.     If A.DriveType = 1 Then
  5.        aDisk = aDisk & A.DriveLetter & ": "
  6.     End If
  7. Next
  8. aDisk = Replace(aDisk, "A: ","")
  9. If aDisk = "" Then
  10.    WScript.Echo  "U盘设备未插入"
  11.    Else
  12.    WScript.Echo "U盘符为 " & aDisk
  13. End If
复制代码

作者: sylovanas    时间: 2008-12-8 10:20

代码可用,使用起来也很完美
非常感谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2