批处理脚本 - 在For循环中创建动态变量名称或数组

时间:2014-06-15 23:21:23

标签: arrays variables batch-file dynamic names

我想问你是否可以提供建议。

我不知道是否可以在批处理或数组中创建动态变量名或类似的东西。例如,在for循环之前设置c = 0然后在for循环中设置c = c + 1并使用此数字在for循环中创建动态变量名称,例如:set entry%c%='somestring'

然后使用这些编号的变量来打印输出外部的循环,例如: echo%entry1% echo%entry2%

示例:

@echo off

set /a c=1

for %%i in (list.txt) do (

set /a c=c+1
set entry%c% = %%i

)

echo %entry1%
echo %entry2%

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我用

for /f "tokens=1*delims=[]" %%a in ('find /n /v "" list.txt') do set "entry%%a=%%b"

但是关于

的警告
set entry%c% = %%i

批处理对SET语句中的空格敏感。如果这样做,它会将名为“entry1 Space ”的变量设置为“ Space thefirstlineofthefile”的值。

我使用的set "var=value"语法确保批处理行上的任何尾随空格都不包含在分配给var的值中。

答案 1 :(得分:1)

您需要使用延迟扩展变量,否则c将始终扩展为相同的值。

您还需要删除set语句中的空格。 set entry%c% = %%i会创建一个名为(例如)entry1<space>的变量,您必须像%entry1 %那样进行展开。因此,只需删除=运算符周围的空格。

@echo off

setLocal enableDelayedExpansion
set c=0

for %%i in (list.txt) do (
    set /a c+=1
    set entry!c!=%%i
)

echo %entry1%
echo %entry2%

此外,如果您想循环浏览您创建的所有变量,您可以执行以下操作。

for /L %%i in (!c!, -1, 1) do echo !entry%%i!

for /L %%i in (1, 1, !c!) do echo !entry%%i!