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

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

[复制链接]
发表于 2009-3-3 16:38:06 | 显示全部楼层 |阅读模式
我们应该用批处理做些实用的事情,本帖旨在讨论批处理中如何获取可移动磁盘的盘符(以便自动实现一些针对可移动磁盘的文件/文件夹操作),而不是纯粹为了显示一下可移动磁盘的盘符是什么(没有什么意义的事情还是少做为妙)。如果您的代码只是显示了一下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技术 +1 收起 理由
smss + 1 美观实用

查看全部评分

发表于 2009-3-8 19:21:11 | 显示全部楼层
感谢楼主!但是我想问一下,当我插的是两个U盘的时候怎么办?
发表于 2009-3-8 19:25:32 | 显示全部楼层
set DriveU=%%h
改为
set /a n+=1&call set DriveU%%n%%=%%h

最后用set DriveU显示所有的U盘盘符
发表于 2009-3-10 14:18:39 | 显示全部楼层

回复 1楼 的帖子

'fsutil fsinfo drivetype %%a:^|findstr "Removable 可移动"') do (
    set DriveU=%%h
  不懂  希望解答
 楼主| 发表于 2009-3-10 15:25:08 | 显示全部楼层

回复 4楼 的帖子

运行这个命令
fsutil fsinfo drivetype C:
看看结果
思考一下
发表于 2009-3-15 02:16:45 | 显示全部楼层

【方案一】fsutil

【方案一】fsutil
仅获得盘符

@echo off

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 (

for /f %%h in ('fsutil fsinfo drivetype %%a:^|findstr "
可移动"') do (

echo.%%h


)

)

@echo off
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 ( fsutil fsinfo drivetype %%a:|findstr "可移动" )

[ 本帖最后由 wangantao 于 2009-3-15 02:34 编辑 ]
 楼主| 发表于 2009-3-15 11:35:01 | 显示全部楼层

回复 6楼 的帖子

请问你想表达什么意思呢?

本帖旨在讨论批处理中如何获取可移动磁盘的盘符(以便自动实现一些针对可移动磁盘的文件/文件夹操作),而不是纯粹为了显示一下可移动磁盘的盘符是什么(没有什么意义的事情还是少做为妙)。如果您的代码只是显示了一下findstr的结果或者直接echo了一下,请先尝试一下把结果保存到一个变量里面吧。
发表于 2009-4-7 10:20:51 | 显示全部楼层
正想找这个热处理,谢谢!
发表于 2009-4-25 23:23:34 | 显示全部楼层
我的windows home 版怎么提示 wmic不是外部什么什么的。
 楼主| 发表于 2009-4-25 23:41:18 | 显示全部楼层

回复 9楼 的帖子

HOME版系统和精简版系统类似,都是不完整的版本,网友戏称“太监版”或者“阉割版”,不仅无法使用WMIC,还有其它很多功能都被砍掉了。
发表于 2009-4-26 11:08:23 | 显示全部楼层
回复 7楼 的帖子
  1. @title 查看可移动盘个数及盘符(当我插的是两个U盘的时候)
  2. @echo 1楼的代码无显示(去掉“Removable ”后显示一个:显示:m:)改为3楼的代码无显示
  3. @echo off
  4. 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 (
  5.   for /f %%h in ('fsutil fsinfo drivetype %%a:^|findstr "Removable 可移动"') do (
  6.     set DriveU=%%h
  7.   )
  8. )
  9. echo.%DriveU%
  10. echo.&pause
  11. @echo  6楼的代码
  12. @echo off
  13. 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 (
  14. for /f %%h in ('fsutil fsinfo drivetype %%a:^|findstr "可移动"') do (
  15. echo.%%h
  16. )
  17. )
  18. :: 方案一:fsutil 仅获得盘符
  19. :: 显示:l:
  20. :: 显示:m:
  21. echo.&pause
  22. @echo off
  23. 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 ( fsutil fsinfo drivetype %%a:|findstr "可移动" )
  24. :: 显示:l: - 可移动驱动器
  25. :: 显示:m: - 可移动驱动器
  26. echo.&pause
复制代码

评分

参与人数 1PB +5 收起 理由
Batcher + 5 感谢关注

查看全部评分

发表于 2009-4-26 11:40:33 | 显示全部楼层
  1. @echo off&title 查看可移动盘个数及盘符&for %%i 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 fsutil fsinfo drivetype %%i:| find "可移动"
复制代码
发表于 2009-4-26 12:24:21 | 显示全部楼层
  1. @echo off&title 可同时打开多个移动盘&for %%i 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 fsutil fsinfo drivetype %%i: | find "可移动">nul && start %%i:
复制代码
发表于 2009-4-26 12:30:57 | 显示全部楼层
:: 附:打开最后一个分区

  1. @echo off
  2. for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
  3.     if exist %%i:\nul (
  4.         for /f "tokens=3" %%j in ('dir /-c %%i:\') do set freesize=%%j
  5.         set last=%%i
  6.         if not "!freesize!"=="0" goto last_drive
  7.     )
  8. )
  9. goto :eof
  10. :last_drive
  11. explorer  %last%:\
复制代码
 楼主| 发表于 2009-4-26 13:46:58 | 显示全部楼层

回复 11楼 的帖子

1、Removable是为了兼容英文版操作系统,至于你说的中文系统下无法显示的问题,顶楼代码已更新并修复此bug,感谢你的测试。

2、对于多个U盘的情况,3楼的思路是没有问题,至于具体代码如何写,本帖不予过多讨论。

3、本帖主要是为了获取可移动盘符,以便下面自动实现一些针对可移动磁盘的文件/文件夹操作,6楼的代码只是显示了一下可移动盘符而已,偏离了主题,因此你对6楼的代码的修改,我这里也不做过多评论。

4、为了节约论坛空间,如无特殊需要,能用文字描述清楚的时候还是尽量不要贴图吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:50 , Processed in 0.035495 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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