【问题标题】:Accessing unknown number of commands (parameters) in batch file访问批处理文件中未知数量的命令(参数)
【发布时间】:2013-11-27 22:21:57
【问题描述】:

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

我通过字符串数组将目录列表传递到批处理文件中,该字符串数组在 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,所以批处理文件对我来说还是相当新的。任何建议都将不胜感激,因为我一直试图自己解决这个问题一段时间,但没有成功。

【问题讨论】:

标签: arrays batch-file parameters command


【解决方案1】:

如此处所述:

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

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

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

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

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

【讨论】:

  • 我认为这正是我所需要的,这又引出了一个问题——在循环中,我必须创建一个变量并将其设置为当前值。我不确定每次循环时如何创建一个不同的唯一变量。
  • 欢迎来到 SO。请将后续问题作为他们自己的单独问题提出。
  • @RBerteig 好的,很抱歉。下次我会记住这一点的。
  • @derstrom8 当您要求跟进时,请随时在您的原始问题或评论中添加指向它的链接,或者从该问题链接回该问题。这样一来,您很可能会从已经回答过这个问题的人那里获得帮助,并且通过明确的问题和有针对性的答案,整体而言,SO 会受益。
【解决方案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"

Batch-Script - Iterate through arguments

【讨论】:

  • 谢谢,这正是我想要的。我不知道有一种方法可以在批处理文件中创建数组,但回头看我应该知道这是可能的。
  • 很好的答案@Aacini 我想让我的答案更好,但我正在通勤到我家,所以我无法改进我的答案。现在我因为不改进它而感到更快乐,所以我有机会学到更多东西,并看到很棒且组织良好的代码。谢谢! ?
  • @Aacini 我喜欢这个 sn-p,允许我发送任意数量的 "VALUE=KEY" 对,但我正在尝试调整它以允许 *KEY无济于事。如果你有时间,我在这里发布了一个问题,或者更新这个问题,我可以关闭/链接我的问题。 stackoverflow.com/questions/63498946/…
猜你喜欢
  • 2010-11-20
  • 2023-03-11
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
相关资源
最近更新 更多