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
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
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 KiB, 下载附件所需积分 1点 ,下载次数: 1)



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

作者: vkill     时间: 2006-9-27 09:32
Originally posted by pengfei at 2006-9-27 09:14:
真郁闷...

在我电脑上测试行啊!

你的排列图标是怎么样的?

作者: nvflash     时间: 2006-9-27 09:37
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 KiB, 下载附件所需积分 1点 ,下载次数: 1)



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

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



碰到同样的问题,移动硬盘不知道该怎么判断:显示的都是固定驱动器

作者: huahua0919     时间: 2007-12-4 14:19
Originally posted by nvflash at 2006-9-27 09:58 AM:

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

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