首页 > 解决方案 > 无法从 BAT 文件中的数组中获取值

问题描述

我有这个代码:

@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

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

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

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

标签: arraysbatch-filevariables

解决方案


您需要另一层解析。

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在故障排除后删除)


推荐阅读