Board logo

标题: 批处理怎样检测U盘? [打印本页]

作者: nvflash     时间: 2006-9-26 22:46    标题: 批处理怎样检测U盘?

寻求N久,未果,在此抱最后希望,望大家帮助小弟一把,不甚感谢!

这个程序我的思路大概是这样的:
如果 有USB移动设备 (将其格式化,并返回“格式化成功”
) 否则 (
返回重新执行

作者: redtek     时间: 2006-9-26 22:59
太危险了吧?
作者: pengfei     时间: 2006-9-26 23:55
请慎用!!!

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    set genre=%%i
    set genre=!genre:~-2!
    for %%1 in (!genre!) do (
        fsutil fsinfo drivetype %%1 | findstr "移动" >nul 2>nul && if /i not "%%1"=="A:" echo 找到可移动存储设备, 可能为U盘=%%1
    )
)
pause
作者: namejm     时间: 2006-9-27 01:13
  『第 3 楼』的代码有条件限制的:要在XP及其之后的系统下,以管理员权限运行。
  不过在我的机子上测试的时候,移动硬盘和U盘的类型显示的依然是固定驱动器字样,有点奇怪。
作者: nvflash     时间: 2006-9-27 02:07


  Quote:
Originally posted by pengfei at 2006-9-26 23:55:
请慎用!!!

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    set genre=%%i
    set genr ...

麻烦解释一下此段代码的意思好吗?

另外,关于判断是否格式化成功这段代码,为什么没用呢?

format "USBHDD" /q /s /y
if errorlevel==0 (echo 格式化成功
) else (
echo 格式化失败
)

按预计是没有正常格式化就显示“格式化失败”,但每次却都是显示的"格式化成功"。

[ Last edited by nvflash on 2006-9-27 at 02:14 ]
作者: vkill     时间: 2006-9-27 08:18


  Quote:
Originally posted by namejm at 2006-9-27 01:13:
  『第 3 楼』的代码有条件限制的:要在XP及其之后的系统下,以管理员权限运行。
  不过在我的机子上测试的时候,移动硬盘和U盘的类型显示 ...

我的也是这样
作者: pengfei     时间: 2006-9-27 09:14
真郁闷...  

在我电脑上测试行啊!
附件 1: 1.jpg (2006-9-27 09:14, 37.51 K, 下载附件所需积分 1点 ,下载次数: 1)



作者: namejm     时间: 2006-9-27 09:30
  可能是什么地方设置改动了之后就出现找不到 "移动" 这个关键词了,请各位查找一下原因吧。
作者: vkill     时间: 2006-9-27 09:32


  Quote:
Originally posted by pengfei at 2006-9-27 09:14:
真郁闷...  

在我电脑上测试行啊!

你的排列图标是怎么样的?
作者: nvflash     时间: 2006-9-27 09:37


  Quote:
Originally posted by pengfei at 2006-9-27 09:14:
真郁闷...  

在我电脑上测试行啊!


那么,如果我现在要格式化这个U盘,应该用什么变量来代表盘符呢?

作者: pengfei     时间: 2006-9-27 09:42
不知道是不是变量用的不妥, 改了一下:

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    set genre=%%i
    set genre=!genre:~-2!
    for %%a in (!genre!) do (
        fsutil fsinfo drivetype %%a | findstr "移动" >nul 2>nul && if /i not "%%a"=="A:" echo 找到可移动存储设备, 可能为U盘=%%a
    )
)
pause


格式化U盘的盘符变量为 %%a

[ Last edited by pengfei on 2006-9-27 at 10:39 ]
作者: vkill     时间: 2006-9-27 09:45
全是显示 驱动器
附件 1: aa.BMP (2006-9-27 09:45, 52.87 K, 下载附件所需积分 1点 ,下载次数: 1)



作者: pengfei     时间: 2006-9-27 09:48
楼上兄弟运行 fsutil fsinfo drives 命令显示没错, 难道'fsutil fsinfo drives^|find /v 后面这个管道命令没有成功执行.
作者: nvflash     时间: 2006-9-27 09:58


  Quote:
Originally posted by pengfei at 2006-9-27 09:42:
不知道是不是变量用的不妥, 改了一下:

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""' ...

对于仁兄的帮助表示无比崇高的敬意!
作者: nvflash     时间: 2006-9-27 10:33
但是,在我的电脑上还是检测不到,什么也不显示,就暂停了
作者: pengfei     时间: 2006-9-27 10:35
不好意思, 一个变量出错了, 已经修正, 请重新测试11楼的代码!

[ Last edited by pengfei on 2006-9-27 at 10:40 ]
作者: nvflash     时间: 2006-9-27 22:13
老大,我加了format %%a后,却把E盘格式化了!我是这样加的


setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    set genre=%%i
    set genre=!genre:~-2!
    for %%a in (!genre!) do (
        fsutil fsinfo drivetype %%a | findstr "移动" >nul 2>nul && if /i not "%%a"=="A:" echo 找到可移动存储设备, 可能为U盘=%%a
format %%a /q /x /y
    )
)
作者: 9527     时间: 2006-9-27 22:54
问题好像没有这么复杂吧???
@echo off
for /f "delims=" %%a in ('fsutil fsinfo drives^|find /v ""') do set a=%%a
fsutil fsinfo drivetype %a%|find "移动" >nul&&goto :format||echo 对不起,没有找到移动驱动器!&&goto:eof
:format
format %a% /fs:fat32 /q
echo 格式化完毕!!!
作者: pengfei     时间: 2006-9-28 00:10
实在对不起! 都怪我, 没有说清楚, 格式化E盘已经是不幸中的万幸了, 楼主的格式化代码加错地方了, 没有来个全盘格式化已经是幸运了.

你的格式化是加在内循环中, %%a这个循环变量会把硬盘上所有的盘符都列出. 所以你在用的时候一定要谨慎!!!

代码修改如下:
@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    set genre=%%i
    set genre=!genre:~-2!
    for %%a in (!genre!) do (
        fsutil fsinfo drivetype %%a | findstr "移动" >nul 2>nul && if /i not "%%a"=="A:" (
            set drive=%%a
            echo 找到可移动存储设备, 盘符为%%a  
            call :go
        )
    )
)
cls
echo 所有盘符已检测完毕!
pause
exit

:go
echo.
set /p choice=请选择(y=格式化该盘 n=跳过):
if /i "%choice%"=="y" goto begin
if /i "%choice%"=="n" goto :eof
goto go
:begin
echo format !drive! /q /x /y
echo 格式化完成!
pause
:eof

格式化代码为了安全起见改成了回显示, 测试过后如没有问题请把前面的确echo去掉
echo format !drive! /q /x /y

[ Last edited by pengfei on 2006-9-28 at 00:30 ]
作者: pengfei     时间: 2006-9-28 00:12
请大家千万小心, 在测试这段代码前先把format换成echo.

对楼主格式化E盘造成的损失深表愧疚, 如果E盘有重要数据, 请给我留言, 我这有个数据恢复的软件, 或许能挽回点损失.

[ Last edited by pengfei on 2006-9-28 at 00:48 ]
作者: nvflash     时间: 2006-9-28 10:58
没有什么重要东西了,感谢大哥的帮助啊!
作者: 3742668     时间: 2006-9-29 02:10
[部分已结]有否类似 findcd 的 U盘盘符识别程序 findusb ?  
作者: uemuem     时间: 2007-12-4 12:40


  Quote:
Originally posted by namejm at 2006-9-27 01:13:
  『第 3 楼』的代码有条件限制的:要在XP及其之后的系统下,以管理员权限运行。
  不过在我的机子上测试的时候,移动硬盘和U盘的类型显示的依然是固定驱动器字样,有点奇怪。

碰到同样的问题,移动硬盘不知道该怎么判断:显示的都是固定驱动器
作者: huahua0919     时间: 2007-12-4 14:19


  Quote:
Originally posted by nvflash at 2006-9-27 09:58 AM:

对于仁兄的帮助表示无比崇高的敬意!

为什么是 tokens=1,2   ---- tokens=1
为什么要!genre:~2!     ---- 直接舍去
感觉有些多余