我需要创建一个查找驱动器号并执行代码的批处理文件,否则查找另一个字母并执行相同的代码。我想将字母设为变量,因此我不必重复代码,例如:
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
答案 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%,而不必重复任何代码 感谢每个人的输入