在我的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”中循环遍历两个字符串?
答案 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处拆分。