【问题标题】:Batch Script - Create Dynamic Variable Names or Array in For Loop批处理脚本 - 在 For 循环中创建动态变量名称或数组
【发布时间】:2014-06-15 23:21:22
【问题描述】:

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

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

然后使用这些编号的变量在 for 循环之外打印输出,例如: 回声 %entry1% 回声%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%

感谢您的帮助。

【问题讨论】:

标签: arrays variables batch-file dynamic names


【解决方案1】:

我会用

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 的值中。

【讨论】:

  • +1 这很聪明。我喜欢使用 find 的 /v 开关来消除空变量的可能性,当然还有 /n 来为变量编号。一个非常好的一个班轮。
  • 太棒了!谢谢 - 正是我一直在寻找的。感谢您的帮助。
【解决方案2】:

您需要使用延迟扩展变量,否则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!

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2016-05-17
    • 1970-01-01
    • 2012-01-05
    • 2021-11-18
    • 2023-03-06
    • 2012-07-11
    • 2016-04-14
    • 1970-01-01
    相关资源
    最近更新 更多