批量搜索windows驱动器号,如果存在设置为变量并执行命令,则尝试另一个字母

时间:2016-10-26 20:45:46

标签: batch-file

我需要创建一个查找驱动器号并执行代码的批处理文件,否则查找另一个字母并执行相同的代码。我想将字母设为变量,因此我不必重复代码,例如:

if exist E:\ 
var = E:\
else
if exist D:\
var = D:\

mv var\SQL\...\...
del var\...\...

这个逻辑会起作用吗?或者使用

更好
if exist E:\ goto cont1
else goto newletter

:cont1
code

:newletter
if exist D:\ go to cont2
else goto end

:cont2 
code

:end

4 个答案:

答案 0 :(得分:2)

要获取所有可用的驱动器,可以使用wmic命令:

wmic LogicalDisk GET DeviceID

您还可以过滤某些驱动器类型,例如本地磁盘(请参阅Microsoft文章Win32_LogicalDisk class了解所有可能的DriveType过滤器选项):

wmic LogicalDisk WHERE DriveType=3 GET DeviceID

然后环绕两个for /F循环以获取wmic命令行的输出(不过滤,只需删除WHERE DriveType^=3部分):

for /F "skip=1" %%D in ('wmic LogicalDisk WHERE DriveType^=3 GET DeviceID') do (
    for /F %%C in ("%%D") do (
        echo Do stuff with drive %%D\...
    )
)

外部for /F循环捕获wmic命令行的输出。由于wmic产生for /F出现问题的Unicode输出(它在捕获的输出中留下了一些孤立的回车字符),所以嵌套了另一个for /F循环来摆脱这些伪影。< / p>

如果由于某种原因不想使用wmic命令,您可以使用for循环遍历字母表中的所有字母并检查驱动器是否存在,如下所示:< / p>

for %%D in (A B 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:\" (
        echo Do stuff with drive %%D:\...
    )
)

在这里,当然不能按驱动器类型进行过滤。

答案 1 :(得分:0)

以下内容适用于我的Windows 10系统,用于检测驱动器:

@echo off
if not exist c: goto check2
set temp=C
goto sharedcode

:check2
if not exist d: goto error
set temp=D
goto sharedcode

:sharedcode
echo %temp%:\ exists!
goto end

:error
echo nothing exists!

:end

答案 2 :(得分:0)

这应该只以相反的顺序迭代你安装的驱动器;

@ECHO OFF
FOR /F "DELIMS=\" %%A IN ('MOUNTVOL^|FIND ":\"') DO CALL SET _=%%A %%_%%
FOR %%A IN (%_%) DO (ECHO=MV %%A\SQL\...\...
    ECHO=DEL %%A\...\...)
TIMEOUT -1 1>NUL

[编辑/]

IF EXIST E:\ (SET drive=E:) ELSE (IF EXIST D:\ (SET drive=D:) ELSE (ECHO="No E:\ or D:\ drive found"))

答案 3 :(得分:0)

我找到了一个很好的解决方案,因为我只寻找2个驱动器,我发现if else语句可以很好地工作

if exist E:\ ( SET drive=E: )
else if exist D:\ ( set drive=D: )
else ( echo "No E:\ or D:\ drive found")

这样,我可以将此后的所有代码设置为变量%drive%,而不必重复任何代码 感谢每个人的输入