无法从 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 文件中的数组中获取值的主要内容,如果未能解决你的问题,请参考以下文章