我想请问您是否可以提供建议。
我不知道是否可以批量或数组或类似的方式创建动态变量名称。例如,在 for 循环之前设置 c=0,然后在 for 循环内设置 c = c+1 并使用该数字在 for 循环内创建动态变量名称,例如: set entry%c% = 'somestring'
然后使用这些编号变量在 for 循环外部打印输出,例如: 回显%条目1% 回显%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%
感谢您的帮助。
我会用
for /f "tokens=1*delims=[]" %%a in ('find /n /v "" list.txt') do set "entry%%a=%%b"
但有一点警告
set entry%c% = %%i
批处理对
SET
语句中的空格敏感。如果这个有效,它会将名为“entry1Space”的变量设置为“Spacethefirstlineofthefile”的值。
我使用的
set "var=value"
语法可确保批处理行上的任何尾随空格不包含在分配给 var
的值中。
您需要使用延迟扩展变量,否则
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!
这是我用来列出已连接的 adb 设备的片段。它将每个设备分配给一个名为“device[n]”的动态变量,其中 n 是索引,1 是列表中第一个设备的索引。
setlocal enabledelayedexpansion
set i=0
set sum_of_devices=0
REM get list of connected devices
for /f "eol=L tokens=1" %%a in ('adb devices ^| findstr "device"') do (
set /a i=i+1
REM device is assigned to dynamic variable
for /f "tokens=1" %%b in ('echo device_!i!') do (
set %%b=%%a
)
)
echo !device_1!
echo !device_2!
endlocal