【发布时间】: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