[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理获取U盘、可移动硬盘的盘符(2015-01-14更新)

我们应该用批处理做些实用的事情,本帖旨在讨论批处理中如何获取可移动磁盘的盘符(以便自动实现一些针对可移动磁盘的文件/文件夹操作),而不是纯粹为了显示一下可移动磁盘的盘符是什么(没有什么意义的事情还是少做为妙)。如果您的代码只是显示了一下findstr的结果或者直接echo了一下,请先尝试一下把结果保存到一个变量里面吧。

本帖讨论的只是方法,对于多于1个可移动磁盘情况,我们在这里不予过多讨论,如果您觉得有必要,请到相应版块单独发帖。

【方案一】fsutil
  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.         set DriveU=%%h
  5.     )
  6. )
  7. echo,%DriveU%
  8. pause
复制代码
【方案二】WMIC
  1. @echo off
  2. for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
  3.     set DriveU=%%a
  4. )
  5. echo,%DriveU%
  6. pause
复制代码
【方案三】BAT + VBS (优点是可以兼容Win2000系统)
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (
  3.     more +%%i "%~f0" > "%temp%\GetU.vbs"
  4. )
  5. for /f %%a in ('cscript /nologo "%temp%\GetU.vbs"') do (
  6.     set "DriveU=%%a"
  7. )
  8. echo,%DriveU%
  9. pause
  10. goto :eof
  11. :DynamicScript
  12. Set Fso = CreateObject("Scripting.FileSystemObject")
  13. Set B = Fso.Drives
  14. For Each A in B
  15.     If A.DriveType = 1 Then
  16.         aDisk = aDisk & A.DriveLetter & ": "
  17.     End If
  18. Next
  19. aDisk = Replace(aDisk, "A: ","")
  20. WScript.Echo aDisk
复制代码
1

评分人数

    • smss: 美观实用技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

回复 4# fsh6666


   
'fsutil fsinfo drivetype %%a:^|findstr "Removable 可移动"') do (
    set DriveU=%%h
意思是盘符有没有带有Removable 可移动这几个字样,有就是U盘
不过U盘可能会被改名,所以不推荐

TOP

回复 3# zqz0012005 不理解 应该怎么写啊

TOP

原谅我把版主大大10年前的好帖又翻出来了
最近有需求,要先找到插入的一个U盘,再做后续的操作。(只考虑一个U盘一个分区的情况,一个U盘多分区多个U盘不考虑)
本帖给的三种方法 基本是以 DriveType =可移动磁盘   来判断是否是U盘,这个一般情况下问题不大,但是现在越来越多的U盘不适用了,因为很多U盘出厂时磁盘类型是 本地磁盘 ,windows上选盘符,右键属性中可以看到。我现在手上的一个闪迪的,一个Kingston的windows识别出来都是  本地磁盘,所以这三种方法都失效了。
后来我就找其它的方法,网上有找到 C++调用原生的windowsAPI的方法(通过BUSType判断),不过太复杂不太想用,完全搞懂得windowsAPI函数的参数都要半天(这方面不太熟悉,熟的人应该也很快)。后来还是找到有相关的判断U盘磁盘的方法,原本是用powershell的,调用的还是用WMI,只不过不用WMI其它的类。我还是改成用bat来写了。
主要方法就是先用 WMI 中DiskDrive类 的InterfaceType属性是否为'USB' 来判断U盘,
再用win32_LogicalDiskToPartition 类中通过磁盘找到对应的分区的盘符。(WMI中的类什么的,东西太多了,我也不熟,找到啥用啥)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. wmic DiskDrive where "InterfaceType='USB'" 2>&1 |findstr "没有可用实例" >nul
  4. if not errorlevel 1 (
  5. echo 没有找到U盘,请确认先插入U盘!
  6. ) else (
  7. for /f "skip=1" %%a in ('wmic DiskDrive where "InterfaceType='USB'" get DeviceID ^|findstr "."') do (
  8. set diskName=%%a
  9. set diskID=!diskName:~-1,1!
  10. )
  11. set diskName=Disk #!diskID!
  12. for /f "tokens=7 delims== " %%a in ('wmic path win32_LogicalDiskToPartition ^|findstr /c:"!diskName!"') do (set U=%%a)
  13. set U=!U:~1,2!
  14. echo 已找到U盘,盘符为 !U!
  15. rem 找到后可做后续操作。
  16. )
  17. pause
复制代码
我在win8,win10下测试都通过,不管U盘识别成可移动还是本地磁盘,都成正确读出盘符。
写的不对的地方,请指正。

TOP

如何用批处理定位U盘或移动硬盘,并且把找到的盘自动带入下一个批处理命令???


在线等

TOP

吃饭GVvvgbfki

TOP

很強大的批處理
對於工作上有幫助
特別感謝

TOP

还是有用的

TOP

经典,收藏了
[url=http://taqiao.net]我的空间[/url]

TOP

回复 32# garyng


    是的,要学的还很多

TOP

回复 31# 小胖狐狸


    哈哈~
大开眼界了吧~
楼主可是管理员啊~
可资深咯~
新手吧~
多多学习吧~

TOP

今天要用,搜到了这个帖子,很好很好
看了大家的讨论也收获颇丰

楼主的意思很合我的心意,要的就是把盘符赋值到一个变量中供后续调用,只是在屏幕上显示一下的话,没有意义
只不过关于U盘/移动硬盘,被系统识别为“本地硬盘“的情况,似乎确实不好处理

TOP

很强大。。。很好……

TOP

回复 26楼 的帖子

你有什么好的建议呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2楼 的帖子

用第一个批,感觉遍历比较管用。。。
多u盘的问题可以用eol忽略掉,进行再次遍历查询,效率有点低就是了

[ 本帖最后由 dailisishen 于 2009-11-10 21:41 编辑 ]

TOP

返回列表