2011-04-18 93 views
3

我正在尝试编写批处理脚本来查找特定的挂载设备。我在Windows 7批处理脚本查找挂载设备的盘符

我知道该设备将具有文件夹drive:\定制的,所以我想看看所有无限可能性找到一个设备与此路径

这里是我到目前为止

@echo off 
    setLocal Enabledelayedexpansion 


for %%d 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 (
    if exist %%d:\custom (
    ECHO Device Found : %%d 
) 
) 

这不工作,虽然,它认为它存在于每一个驱动器号..所以我看到“找到设备”为每一个驱动器号。这是为什么?我是否在谈论这个错误?如何找到在根目录上具有“自定义”文件夹的驱动器盘符?

感谢,
斯蒂芬妮

回答

1

在路径的末尾添加\的驱动器号。

for /f "tokens=1,*" %%i in ('fsutil fsinfo drives') do (
    :: work with %%j here 
) 

但是,如果一个驱动器号被赋予一个设备没有媒体,它可以仍然给出错误。无论哪种方式,检查如:

if not exist O:\ @echo test 

工作完全对我很好(有和没有not)。该驱动器不存在于我的系统中,因此在删除not时没有输出。

+1

这工作..有点..现在它只落入if statemet如果文件存在,但每次它都会弹出错误'驱动器中没有磁盘。请将磁盘插入驱动器\ device \ harddisk1 \ dr115' – 2011-04-19 17:18:29

+0

@Without Me只是Aweso:有趣...显然,该消息与可移动磁盘驱动器有关。但是,当我运行修改后的示例脚本时,我在XP中没有收到任何此类消息。不知道为什么。 – 2011-04-19 18:31:57

+0

是啊..我不知道。我试图改变它的文件路径寻找我的C:\用户只是为了看看它是否是我的外部设备的问题,但我得到了同样的错误。我不知道它抱怨什么。关于错误,如果我点击“继续”,它工作正常..烦人的是,有一个弹出每次我运行脚本,虽然 – 2011-04-19 19:11:36

-1

试试这个:

IF EXIST %%d:\custom\ (...) 
+0

我得到以下输出“设备中找到:C:系统无法找到该设备指定“。那么它存在并且不会尝试任何其他字母 – 2011-04-18 21:51:55

+0

在win7 x64中出现同样的错误 – m1m1k 2014-08-09 22:29:01

+0

@ m1m1k:在原始批处理文件中用'nul'替换'custom'时,它适用于Win7 x64。看到这里:http://imgur.com/vvlyXqV你的代码看起来如何?你怎么称呼它? – 2014-08-11 14:33:11

3

使用fsutil fsinfo drivesfor语句而不是一个静态列表中:

if exist %%d:\nul (
    echo Device found %%d 
) 
+0

这似乎并没有做任何事情,当我运行它。你能告诉我'/ f'toekns = 1,*'是什么吗? – 2011-04-19 17:32:57

+0

@没有我它只是aweso:'/ f'与单引号一起执行单引号中的命令并将这些命令标记。 tokens = 1,*“'告诉它在变量'%% i'(第一个标记)和'%% j'(rest)中获取命令的输出,并且我尝试了它,它可以工作。因为双'%%'(这是脚本文件中的语法),所以在命令行上工作。删除一个'%',它也应该在命令行上工作。显然,你必须对变量做些什么('%% j'),例如将它们传递给你原来的任何东西 – 0xC0000022L 2011-04-20 00:12:26

+1

PS。这个命令需要win7中的Admin Priveleges x64 – m1m1k 2014-08-09 22:28:24

-2

这适用于硬盘和U盘:

@echo off 
for %%? 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 (
     dir %%?:\ > nul 2>nul 
     if exist %%?:\custom echo Device found(s): %%?:\ 
) 

PS:运行WinXP的

+0

在win7 x64下无法工作 – m1m1k 2014-08-09 22:27:58

1

有点复杂,但是这是为了避免在Win7的阻塞错误,唯一的解决办法:

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
    if exist %%d:\custom echo Device found 
) 

我发现的另一种方法是使用vol命令+检查ERRORLEVEL(if == 1驱动器未安装):

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
    vol %%d: 
    if !ERRORLEVEL!==0 if exist %%d:\custom echo Device found 
) 

注意:在WinXP DISKPART将不会看到可移动驱动器...

+0

在win7 x64上无法工作 - 它必须获得用户权限才能运行DISKPART(权限弹出),然后它位于不同的窗口中。 – m1m1k 2014-08-09 22:30:07

+0

这也需要管理员权限 – 2016-11-14 03:07:00

0
@ECHO OFF 
:CICLO 
CLS&ECHO.&ECHO VER ESTADO UNIDADES CON WMIC 
SET "DVF=" 

FOR /F "tokens=1,*" %%A IN ('wmic logicaldisk get caption^, description ^| FIND ":"') DO (

    VOL %%A >nul 2>&1 && (
     CALL SET "DVF=%%DVF%% %%A"& ECHO %%A ^| ON. %%B) || (
     ECHO %%A ^| OFF. %%B 
    ) 
) 
ECHO DEVICEFOUND: %DVF% 
TIMEOUT /T 5 >NUL 
GOTO:CICLO 
+1

欢迎使用堆栈溢出!请考虑包含一些关于您的答案的信息,而不是简单地发布代码。我们尝试提供的不仅仅是“修复”,而是帮助人们学习。你应该解释原始代码中的错误,你做了什么不同,以及为什么你的改变起作用。 – 2014-09-16 06:36:13

+0

谢谢安德鲁,但是我的英语是......没什么。 真的很少有解释。我们使用“wmic LogicalDisk get caption,description”来提取驱动程序(%% A)或驱动程序和类型(%% B)。 Vol用于推断驱动程序是否准备就绪,并且其输出会随意修改。 '^ |查找“”循环出于格式原因是因为否则我们得到回车或什么wmic。但是使用'^ | findstr/i“X”',其中X是本地磁盘,硬盘或CD-ROM等,可以区分您需要的驱动程序的类型。该循环仅用于动态演示其操作。 :)。一声问候。 – 2014-09-16 07:32:02

+0

你需要在答案中加上解释*。 – 2014-09-16 07:35:22