这个有点难以解释,但我会尽我所能。
我通过字符串数组将目录列表传递到批处理文件中,该字符串数组是用Java创建的,然后使用Runtime.getRuntime()。exec(命令)传递给.bat。我遇到的麻烦是关于访问命令数组,其大小可能因执行而异。例如,在一次运行期间,“命令”可能包含以下内容:
{“cmd.exe”,“/ C”,“开始”,“program.bat”,“stringA”,“stringB”,“stringC”}
前四个元素用于调用批处理文件,因此只有字符串A,B和C作为参数传递到批处理文件(program.bat)中。但是,在下一次运行中,“命令”可能如下所示:
{“cmd.exe”,“/ C”,“开始”,“program.bat”,“stringA”,“stringB”,“stringC”,stringD,stringE}
如您所见,参数列表中还添加了两个字符串。我的问题是:在我的批处理文件中,我有这个:
::Get stringA (param 1)
set stringA=%1
::Get stringB (param 2)
set stringB=%2
::Get stringC (param 3)
set stringC=%3
这将获取三个字符串参数(来自第一个“命令”数组)并将局部变量设置为传递给相应参数的任何值。我想知道是否有办法从批处理文件中确定参数的数量(例如,来自第二个“命令”数组),并相应地设置/创建适当数量的局部变量。我主要关注Java,因此批处理文件对我来说仍然是一个新手。任何建议都会非常感激,因为我一直试图在自己身上花一点时间没有成功。
答案 0 :(得分:3)
如上所述:
https://stackoverflow.com/a/14298769/955143
您可以读取%1到%9,并使用SHIFT从数组中删除第一个元素,然后将它们重新命名为新数字。
例如,%2变为%1,第10个元素变为第9个,您可以按%9进行访问。
由于读取值变为空字符串,因此您已到达数组的末尾
您可以编写一个循环(使用goto或for)来重新显示%1值,并使用SHIFT将第二个元素旋转到第一个位置,并检查它是否为空,然后重复该过程。
答案 1 :(得分:2)
@echo off
setlocal enabledelayedexpansion
set argCount=0
for %%x in (%*) do (
set /A argCount+=1
set "argVec[!argCount!]=%%~x"
)
echo Number of processed arguments: %argCount%
for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"
例如:
C:> test One "This is | the & second one" Third
Number of processed arguments: 3
1- "One"
2- "This is | the & second one"
3- "Third"