【问题标题】:Can't get value from array in BAT file无法从 BAT 文件中的数组中获取值
【发布时间】: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 以便为您提供工作脚本。我觉得你把事情复杂化了。
  • 非常感谢。如果您还有一分钟的时间,您能评价一下我的解决方案吗?))它有效,但我认为它可以更优雅。
  • 看不出有什么问题?考虑echo !fname[!n!]!。这将被评估为 echo the currentvalue of "fname[" n the currentvalue of "]" 既没有定义变量 fname[ 也没有定义 ],因此替换为 nothing

标签: arrays batch-file variables


【解决方案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

【讨论】:

  • 非常感谢。如果您还有一分钟的时间,您能评价一下我的解决方案吗?))它有效,但我认为它可以更优雅。
  • 工作正常(我将其包含在我的答案中并使其更安全)。完全有效的方法(正如他们所说:给猫剥皮的方法不止一种)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多