Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用索引批处理在for循环中设置变量_Batch File - Fatal编程技术网

Batch file 使用索引批处理在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 由于

我试图在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%

我做错了什么?

为什么设置了
=
前后的空格?这将创建一个名为
%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:
驱动器