Windows批处理循环尽pipevariables与dynamic令牌计数

在我的Windowsbatch file中,我有一些variables与不同数量的string。 对于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 

现在我想开始一个应用程序多次,因为我的variables中有string,我想给应用程序的当前string作为参数。 我试过这个:

  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 ) ) 

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

当前string的数量:1“%H”“kann syntaktisch an dieser Stelle nicht verarbeitet werden。(%H”“在这个地方不能使用语法)当前string的数量:2”%H“”kann syntaktisch an dieser Stelle nicht verarbeitet werden。

我怎样才能通过我的variables“string”中的两个string循环

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

分割是delim字符的作用,它是默认的空间和制表符,它们也在引用的参数中工作。
所以我把你的分隔符改为分号,然后就可以了。

 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 

好吧,我会尽量使它更清楚。

上面的答案帮了我一点时间。

正如我在我的问题开始时显示的,我有以下变量:

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

我想循环这个变量,所以最后我有两个完整的参数:第一个:

 "-start" 

第二个:

 "-end someOption" 

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

 "-start" 

(这是正确的)和

 "-end 

/这是错误的,因为他把字符串切成空格。

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

 -start 

第二个参数有一个选项:

 -end someoption 

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