我正在尝试在for循环中设置索引的全局变量。 然后,我想打破循环并打印出该值。代码如下:
SetLocal EnableDelayedExpansion
for %%d in (z y x w v u t s r q p o n m l k j i h g f e d c) do (
set letter = %%d
if exist %%d:\ (echo nothing) else (goto break)
)
:break
echo %letter%
timeout 30
由于某些原因,我无法回显%letter%
的值
我在做什么错了?
答案 0 :(得分:2)
为什么设置了=
之前和之后的空格?会创建一个名为%letter %
(变量空间)和值为d
(前导空间)的变量
SetLocal EnableDelayedExpansion
for %%d in (z y x w v u t s r q p o n m l k j i h g f e d c) do (
set "letter=%%d"
if exist %%d:\ (
echo nothing
) else (
goto break
)
)
:break
echo %letter%
timeout 30
您需要从脚本中了解的一件事,如果不存在任何驱动器,它将退出循环,回显它,并且不会返回到循环。如果这是您的计划,那么很好,否则,将标签设为call
,而是放弃标签并在循环的else
部分中运行代码。
或更佳的选择也许是:
@echo off
for %%d in (z y x w v u t s r q p o n m l k j i h g f e d c) do (
if not exist %%d:\ echo %%d & timeout 30
)
如果您不想为每个不存在的结果等待30秒,则可以删除&
并将timeout 30
语句移动到最后一个括号的下面,例如:
@echo off
for %%d in (z y x w v u t s r q p o n m l k j i h g f e d c) do (
if not exist %%d:\ echo %%d
)
timeout 30
答案 1 :(得分:1)
由于目前您的最小代码示例对我来说意义不大,Gerhard Barnard 也提到了,因此我决定发布一些代码段供您参考。
对于这种类型的事情,我更喜欢使用Mountvol
。 在诸如光驱为空的情况下肯定会有所帮助。 D:\
,其中If Exist D:\
将失败,但这不一定意味着驱动器号D:
可以分配给新驱动器。
如果您只是尝试识别第一个已安装的驱动器号,请按字母顺序 :
@Set "_l="&For /F Tokens^=* %%A In ('MountVol^|Find ":\"^|Sort/R')Do @Set "_l=%%~dA"
@Echo(The first letter assigned to a drive is %_l%&Pause
要标识最后安装的驱动器号,请按字母顺序 :
@Set "_l="&For /F Tokens^=* %%A In ('MountVol^|Find ":\"^|Sort')Do @Set "_l=%%~dA"
@Echo(The last letter assigned to a drive is %_l%&Pause
要确定第一个可用的,未安装,驱动器号,按字母顺序:
@Set "_l="&For /L %%A In (67 1 90)Do @Cmd/C Exit/B %%A&Call:Sub %%=EXITCODEASCII%%
@Echo(The first available drive letter is %_l%&Pause&Exit/B
:Sub
@If Not Defined _l MountVol|Find "%1:\">Nul||Set "_l=%1:"
并确定最后一个可用的 unmount 驱动器号,按字母顺序。
@Set "_l="&For /L %%A In (90 -1 67)Do @Cmd/C Exit/B %%A&Call:Sub %%=EXITCODEASCII%%
@Echo(The last available drive letter is %_l%&Pause&Exit/B
:Sub
@If Not Defined _l MountVol|Find "%1:\">Nul||Set "_l=%1:"
在后两个示例中,如果希望包括可能的67
驱动器,则可以用66
替换B:
,如果愿意,可以用65
替换A:
还包括一个可能的68
驱动器,您也可以将其替换为C:
以排除alexaResponse.session.application.applicationId
驱动器。