Batch file 使用索引批处理在for循环中设置变量
我试图在for循环中设置一个全局变量,并使用索引。 然后我想打破循环并打印出该值。代码如下所示:Batch file 使用索引批处理在for循环中设置变量,batch-file,Batch File,我试图在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 由于
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%
我做错了什么?为什么设置了
=
前后的空格?这将创建一个名为%letter%
(尾随空格)的变量和一个值d
(前导空格)
您需要从脚本中了解的一件事是,如果任何驱动器不存在,它将退出循环,回显它,并且不会返回到循环。。如果这就是您的计划,那么很好,否则,调用标签,而是去掉标签,在循环的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秒,可以删除&
并将超时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
为什么设置=
前后的空格?这将创建一个名为%letter%
(尾随空格)的变量和一个值d
(前导空格)
您需要从脚本中了解的一件事是,如果任何驱动器不存在,它将退出循环,回显它,并且不会返回到循环。。如果这就是您的计划,那么很好,否则,调用标签,而是去掉标签,在循环的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秒,可以删除&
并将超时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
由于您的最小代码示例目前对我来说没有什么意义,也有人提到过,我决定发布一些代码片段供您参考
我更喜欢用Mountvol
来做这类事情。这当然有助于解决诸如D:\
处的空光盘驱动器等情况,其中如果存在D:\
将失败,但这并不一定意味着驱动器号D:
可以分配给新驱动器
如果您只是想按字母顺序识别第一个装入的驱动器号:
@Set“_l=”&For/F令牌^=*%A In('MountVol^ | Find):\“^ | Sort/R”)Do@Set“_l=%~dA”
@回音(分配给驱动器的第一个字母是%\u l%&暂停
要按字母顺序识别最后安装的驱动器号,请执行以下操作:
@Set“|l=“&For/F令牌^=*%%A In('MountVol^ | Find):\“^ | Sort')Do@Set“_l=%%~dA”
@回音(分配给驱动器的最后一个字母是%\u l%&暂停
要按字母顺序确定第一个可用的未安装驱动器盘符,请执行以下操作:
@Set“_l=“&For/l%%A In(67 1 90)Do@Cmd/C Exit/B%%A&Call:Sub%%=exitcodescii%%
@Echo(第一个可用驱动器号为%\u l%&暂停和退出/B
:Sub
@如果未定义,请查找“%1:\”>Nul设置“\u l=%1:”
并按字母顺序确定最后一个可用的、未安装的驱动器号
@Set“_l=“&For/l%%A In(90-167)Do@Cmd/C Exit/B%%A&Call:Sub%%=exitcodescii%%
@回显(最后可用的驱动器号为%\u l%&暂停和退出/B
:Sub
@如果未定义,请查找“%1:\”>Nul设置“\u l=%1:”
在后两个示例中,如果您希望包括一个可能的B:
驱动器,可以将67
替换为66
,或者如果您希望还包括一个可能的a:
驱动器,也可以将其替换为68
,以排除C:
驱动器。作为您的最低代码示例我也提到过,这对我来说没有什么意义,我决定发布一些代码片段供您参考
我更喜欢使用Mountvol
来处理这种类型的事情。它当然会在一些情况下有所帮助,例如D:\
上的空光盘驱动器,其中如果存在D:\
将失败,但这并不一定意味着驱动器号D:
可以分配给新驱动器
如果您只是想按字母顺序识别第一个装入的驱动器号:
@Set“_l=”&For/F令牌^=*%A In('MountVol^ | Find):\“^ | Sort/R”)Do@Set“_l=%~dA”
@回音(分配给驱动器的第一个字母是%\u l%&暂停
要按字母顺序识别最后安装的驱动器号,请执行以下操作:
@Set“|l=“&For/F令牌^=*%%A In('MountVol^ | Find):\“^ | Sort')Do@Set“_l=%%~dA”
@回音(分配给驱动器的最后一个字母是%\u l%&暂停
要按字母顺序确定第一个可用的未安装驱动器盘符,请执行以下操作:
@Set“_l=“&For/l%%A In(67 1 90)Do@Cmd/C Exit/B%%A&Call:Sub%%=exitcodescii%%
@Echo(第一个可用驱动器号为%\u l%&暂停和退出/B
:Sub
@如果未定义,请查找“%1:\”>Nul设置“\u l=%1:”
并按字母顺序确定最后一个可用的、未安装的驱动器号
@Set“_l=“&For/l%%A In(90-167)Do@Cmd/C Exit/B%%A&Call:Sub%%=exitcodescii%%
@回显(最后可用的驱动器号为%\u l%&暂停和退出/B
:Sub
@如果未定义,请查找“%1:\”>Nul设置“\u l=%1:”
在后两个示例中,如果希望包括一个可能的B:
驱动器,可以将67
替换为66
,或者如果希望还包括一个可能的a:
驱动器,也可以将其替换为68
以排除C:
驱动器