Windows Batch循环遍历带有动态令牌计数的变量

时间:2012-08-22 12:06:53

标签: windows loops dynamic batch-file token

在我的Windows批处理文件中,我有一些带有不同数量字符串的变量。 对于exapmle:

set string="-start" "-end someOption" 

我按照以下方式计算String的数量:

Set count=0
For %%j in (%string%) Do Set /A count+=1
echo.Total count: %count%

输出结果为:

Total count: 2

现在我想在我的变量中使用Strings多次启动一个应用程序,我想给应用程序提供当前字符串作为参数。我试过这个:

 FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo %%H
        FOR /F "tokens=%%H " %%I IN ("%string%") Do (
            echo %%I
            rem java -jar app.jar %%I
        )
    )

但不幸的是,这不起作用:那就是输出:

  

当前字符串的数量:1“%H”“kann syntaktisch an dieser Stelle   nicht verarbeitet werden。 (%H“”不能在此处使用语法   当前字符串的数量:2“%H”“kann syntaktisch dieser   Stelle nicht verarbeitet werden。

如何在变量“string”中循环遍历两个字符串?

2 个答案:

答案 0 :(得分:6)

您不能在FOR/F的选项字段中使用FOR参数或延迟扩展变量 但是你可以创建一个函数并使用百分比扩展。

分割是分隔字符的效果,它是默认空格和制表符,它们也在引用参数中起作用。
所以我将分隔符更改为分号,然后就可以了。

set string="-start";"-end someOption" 
set count=0
For %%j in (%string%) Do Set /A count+=1
echo.Total count: %count%

FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo %%H
    call :myFunc %%H
)
exit /b
:myFunc
FOR /F "tokens=%1 delims=;" %%I IN ("%string%") Do (
  echo %%~I
  rem java -jar app.jar %%I
)
exit /b

答案 1 :(得分:0)

好的,我会尽量让它更清楚。

上面的答案对我有所帮助。

正如我在问题开头所示,我有以下变量:

set string="-start" "-end someOption" 

我想遍历这个变量,以便最后我有两个完整的参数: 第一个:

"-start"
第二个:

"-end someOption"

但是在调用函数后回声是:

"-start" 

(这是正确的) 和

"-end

/这是错误的,因为他在空格处插入了字符串。

但是在开始我的应用程序的最后,我需要两个正确的参数。他们应该是这样的: 第一个参数:

-start

和第二个参数有一个选项:

-end someoption

所以我需要消除引号,第二个参数不能在whitemark处拆分。