Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有动态令牌计数的Windows批处理循环变量_Windows_Loops_Dynamic_Batch File_Token - Fatal编程技术网

具有动态令牌计数的Windows批处理循环变量

具有动态令牌计数的Windows批处理循环变量,windows,loops,dynamic,batch-file,token,Windows,Loops,Dynamic,Batch File,Token,在我的Windows批处理文件中,我有一些带有不同数量字符串的变量。 例如: set string="-start" "-end someOption" 我用以下方法计算字符串的数字: Set count=0 For %%j in (%string%) Do Set /A count+=1 echo.Total count: %count% 产出将是: Total count: 2 现在,我希望启动一个应用程序的次数与变量中有字符串的次数相同,并且希望将当前字符串作为参数提供给应用程序。

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

set string="-start" "-end someOption" 
我用以下方法计算字符串的数字:

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

Total count: 2
现在,我希望启动一个应用程序的次数与变量中有字符串的次数相同,并且希望将当前字符串作为参数提供给应用程序。我试过这个:

 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 an dieser 斯泰尔·尼赫特·韦尔贝特·韦登


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

您不能在/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" 
(这是正确的) 及

/这是错误的,因为他在空白处撕开了字符串

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

-start
第二个参数有一个选项:

-end someoption

所以我需要去掉引号,第二个参数不能在白点处分开。

好的,非常感谢。这个想法对我帮助很大,但不幸的是它仍然不完美。因为当我执行它时,它会显示
1”-start“2”-endt
第一个参数“-start”是perfekt,因为我可以直接在我的应用程序中使用这个参数,但是在第二个参数中缺少它的选项应该是
-end someOption
我不明白你想说什么。也许你可以用一些示例编辑你的问题现在我明白了!我更改了答案,也删除了附加的引号
-end someoption