找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41591|回复: 9

[文件操作] 要怎么获取U盘的盘符?

[复制链接]
发表于 2008-12-1 21:29:33 | 显示全部楼层 |阅读模式
本帖最后由 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 编辑 ]
发表于 2008-12-1 22:11:17 | 显示全部楼层
谁能告诉我 以最后一个盘符作为 U 盘盘符 这个方法会不会出错?
发表于 2008-12-1 22:15:23 | 显示全部楼层
  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. )
复制代码
发表于 2008-12-1 22:15:49 | 显示全部楼层

回复 2楼 的帖子

可能出错。
发表于 2008-12-1 22:23:56 | 显示全部楼层
原帖由 Batcher 于 2008-12-1 22:15 发表
可能出错。
什么情况下会出错?
发表于 2008-12-1 22:30:00 | 显示全部楼层
看看这个
http://bbs.bathome.net/viewthread.php?tid=573&highlight=

  1. devcon.exe disable  USB\Class_08
  2. devcon.exe enable USB\Class_08
复制代码
发表于 2008-12-1 23:48:11 | 显示全部楼层
原帖由 tireless 于 2008-12-1 22:11 发表
谁能告诉我 以最后一个盘符作为 U 盘盘符 这个方法会不会出错?

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

回复 3楼 的帖子

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

第三方工具是能避尽量避
不然用Fi就可以了。
发表于 2008-12-3 10:28:56 | 显示全部楼层
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
复制代码
 楼主| 发表于 2008-12-8 10:20:55 | 显示全部楼层
代码可用,使用起来也很完美
非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:07 , Processed in 0.019527 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表