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

5
在我的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""无法在此处语法处理。(%H"" can not be used syntacticaly at this place) 当前字符串的数量为2 "%H""无法在这里语法处理。
如何循环遍历变量“string”中的两个字符串?
2个回答

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 "-start" 2 "-endt 第一个参数“-start”是完美的,因为我可以直接将此参数用于我的应用程序,但是在第二个参数中缺少选项。第二个参数(即第二个字符串)应该是-end someOption - Metalhead89
我不明白你想说什么。也许你可以在问题中加入一些示例来说明。 - jeb
1
现在我明白了!我改变了我的答案,同时也删除了周围的引号。 - jeb

0

好的,我会尝试让它更清晰。

上面的答案只帮了我一点点。

正如我在问题开头展示的那样,我有以下变量:

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

我想循环遍历这个变量,以便最终我有两个完整的参数: 第一个:
"-start"

第二个:

"-end someOption"

但是在调用函数后,输出结果为:

"-start" 

(这是正确的) 和

"-end

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

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

-start

并且第二个参数有一个选项:

-end someoption

所以我需要消除引号,并且第二个参数不能在空格处分割。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接