我想问你是否可以提供建议。
我不知道是否可以在批处理或数组中创建动态变量名或类似的东西。例如,在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%
感谢您的帮助。
答案 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!