无法从 BAT 文件中的数组中获取值

Posted

技术标签:

【中文标题】无法从 BAT 文件中的数组中获取值【英文标题】:Can't get value from array in BAT file 【发布时间】:2021-05-26 14:33:31 【问题描述】:

我有这个代码:

@echo off
setlocal EnableDelayedExpansion

rem FILL ARRAY
set n=0
for %%a in (A B C) do (
   set fname[!n!]=%%a
   set /A n+=1
)

rem FIRST OUTPUT
for /L %%i in (0,1,2) do (
   echo !fname[%%i]!
)
echo/

rem SECOND OUTPUT
echo !fname[0]!
echo !fname[1]!
echo !fname[2]!
echo/

rem THIRD OUTPUT DOESN'T WORK
set n=0
for %%a in (A B C) do (
   echo !fname[!n!]!
   set /A n+=1
)

得到:

A
B
C

A
B
C

n
n
n

由于某些原因,我需要 third 样式的输出,并期望与第一种和第二种情况相同的输出,但我不明白它有什么问题。

更新。 谢谢各位。我想我让你有点困惑,但我真的需要在变量中使用这个输出,所以我找到了这个可行的解决方案,也许它会帮助其他人:

rem THIRD OUTPUT WORKS
set n=0
for %%a in (A B C) do (
   for /f "tokens=2* delims==" %%x in ('set fname[!n!]') do (
   <... using %%x...>
   )
   set /A n+=1
)
rem %%x contains output now and can be used anywhere

【问题讨论】:

请给我看一个复制脚本的实际示例,我知道它与此类似,但我需要看看您如何确定元变量%%a 以便为您提供工作脚本。我觉得你把事情复杂化了。 非常感谢。如果您还有一分钟的时间,您能评价一下我的解决方案吗?))它有效,但我认为它可以更优雅。 见***.com/questions/10166386/… 看不出有什么问题?考虑echo !fname[!n!]!。这将被评估为 echo the currentvalue of "fname[" n the currentvalue of "]" 既没有定义变量 fname[ 也没有定义 ],因此替换为 nothing 【参考方案1】:

你需要另一层解析。

call echo %%fname[!n!]%%

for %%n in (!n!) do echo !fname[%%n]!

治愈你的第三种情况。

合并到您的脚本中:

@echo off
setlocal EnableDelayedExpansion

rem FILL ARRAY
set n=0
for %%a in (A B C) do (
   set fname[!n!]=%%a
   set /A n+=1
)

rem skip first and second output

rem THIRD OUTPUT WORKS
set n=0
for %%a in (D E F) do (
  call echo Copy "%%a" "%%fname[!n!]%%"
  for %%n in (!n!) do ECHO cOpy "%%a" "!fname[%%n]!"
  for /f "tokens=1* delims==" %%x in ('set fname[!n!]') do echo coPy "%%a" "%%y"
  set /A n+=1
)

当然只使用三行中的一个(在排除故障后不要忘记删除ECHO

【讨论】:

非常感谢。如果您还有一分钟的时间,您能评价一下我的解决方案吗?))它有效,但我认为它可以更优雅。 工作正常(我将其包含在我的答案中并使其更安全)。完全有效的方法(正如他们所说:给猫剥皮的方法不止一种)

以上是关于无法从 BAT 文件中的数组中获取值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 VS2019 中的 Boost 属性树映射值中获取值()

尝试从数组中的值中删除基于 MKMap 的引脚

无法从 .hpp 文件中的类获取返回数据

BAT批处理文件对文件夹中的文件进行计数然后减1

给定一个数组数组,如何从每个值中去掉子字符串“GB”?

如何在 PHP 中搜索数组中的多个值?