1

这个有点难以解释,但我会尽力而为。

我通过字符串数组将目录列表传递到批处理文件中,该字符串数组在 Java 中创建,然后使用 Runtime.getRuntime().exec(commands) 传递到 .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

这需要三个字符串参数(来自第一个“commands”数组)并将局部变量设置为传递给相应参数的任何值。我想知道是否有办法从批处理文件中确定参数的数量(例如,来自第二个“命令”数组),并相应地设置/创建适当数量的局部变量。我主要关注 Java,所以批处理文件对我来说还是相当新的。任何建议都将不胜感激,因为我一直试图自己解决这个问题一段时间,但没有成功。

4

2 回答 2

4
@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"

批处理脚本 - 遍历参数

于 2013-11-14T20:49:28.953 回答
2

如此处所述:

https://stackoverflow.com/a/14298769/955143

您可以读取 %1 到 %9,并使用 SHIFT 从数组中删除第一个元素,然后将它们重新编号为新数字。

例如,%2 变为 %1,第 10 个元素变为第 9 个,您可以通过 %9 访问它。

由于读取的值变为空字符串,因此您已到达数组的末尾

您可以编写一个循环(使用 goto 或 for)来读取 %1 值,并使用 SHIFT 将第二个元素旋转到第一个位置,并检查它是否不为空,然后重复该过程。

于 2013-11-14T18:42:32.657 回答