当前位置: 首页 > 知识库问答 >
问题:

将参数传递给运行java文件的批处理脚本

柳鸿博
2023-03-14

我正在运行多个批处理脚本,提示用户输入2个输入(每个脚本输入相同的2个)。提示似乎最终来自连接到激活服务器的Java文件,但输入是在cmd窗口而不是Java窗口中输入的。

使用命令

更一般地说,有没有一种方法可以调用一个批处理脚本,该脚本需要n个m参数(尽管这些参数最终由Java请求/处理),并且只以编程方式传递前n个参数(允许用户手动输入剩余的m个参数)?

如果有帮助,下面列出了对Java文件的实际调用的概要。请注意,前两条路径是第三条路径的子目录。理想情况下,我希望保持这个调用的完整性,但如果这是唯一的方法,我可能会在运行它之前修改它。

“java.exe路径”-classpath“jar文件路径”


共有1个答案

翟单弓
2023-03-14
@ECHO Off
SETLOCAL
:: remove variables starting #
FOR  /F "delims==" %%b In ('set # 2^>Nul') DO SET "%%b="

:: set prompts
SET "#prompt1=Prompt for field 1"
SET "#prompt2=Prompt for field 2"
SET "#prompt3=Prompt for field 3"
SET "#prompt4=Prompt for field 4"
SET "#prompt5=Prompt for field 5"
SET "#prompt6=Prompt for field 6"
SET "#prompt7=Prompt for field 7"

:: set defaults

SET "#m=6"
SET "#default1=default for field 1"
SET "#default2=default for field 2"
SET "#default3=default for field 3"
SET "#default4=default for field 4"
SET "#default6=default for field 6"
SET "#default7=default for field 7"

:: options

FOR %%e IN (%*) DO CALL :params "%%~e"

:: read data lines from nominated file

FOR /f "tokens=1*delims=[]" %%b IN ('find /n /v "" ^<%#datafile%') DO SET "#data%%b=%%c"

FOR /L %%c IN (1,1,%#m%) DO IF NOT DEFINED #data%%c CALL :accept %%c

SET #

GOTO :EOF

:params
:: first parameter : datafile name
IF NOT DEFINED #datafile SET "#datafile=%~1"&GOTO :eof

:: Other parameters : use your imagination, for instance
:: For parameters of the form name:value, set "#name"="value"
FOR /f "tokens=1*delims=:" %%b IN (%1) DO IF "%%c" neq "" SET "#%%b=%%c"&GOTO :eof
GOTO :eof

:: get data field %1 from user

:accept
FOR %%e IN (%1) DO (
 IF DEFINED #default%%e (
  CALL ECHO %%#prompt%%e%% [%%#default%%e%%]
  CALL SET "#data%%e=%%#default%%e%%"
 ) ELSE CALL ECHO %%#prompt%%e%%

 SET /p #data%%e=
)
GOTO :eof

嗯,仍然很混乱。我从中收集到的是接受用户在文本文件中未定义的参数。毫无疑问,这些将被组装以执行一些java异端。

由于批处理文件可以接收参数,但数据驻留在文件中,因此我们可以使用提供给批处理的参数来控制批处理行为。

So-上述代码:

从环境中清除名称以#开头的所有现有变量

将可能输入字段的一些提示文本设置为#提示?-这实际上是无限可扩展的。

设置在#m

#default?中的字段设置默认值

处理提供给批处理文件的选项。

>

  • 我任意指定第一个参数为数据文件#datafile

    作为演示,我展示了如何处理表单name: value中提供的其他参数,以将批处理中的#name设置为value

    • 例如,可以通过提供参数m:4来将参数数设置为4,或通过“prompt3:replacement prompt”来更改提示

    然后我们将文件中的行读取到#数据 针对提供的每一行。

    最后,对于每个未定义的#data?,最多为数#m,提示用户输入。

    • 如果#默认值 已定义,则该值将用作该字段的默认值-只要输入即可接受该值

    从这里开始,我刚刚展示了变量集。毫无疑问,它们必须经过按摩才能适应java命令——OP的例子非常清楚。

  •  类似资料:
    • 问题内容: 我有一个名为的MySQL脚本文件,其中包含: 我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量: 问题答案: 您可以使用用户变量来实现您描述的行为。在将变量用作模式标识符而不是数据值时,必须使用准备好的语句,以便可以动态组成查询。 : 调用为

    • 问题内容: 是否可以通过命令行将参数传递给MySQL脚本? 在此示例中,类似于@start_date的内容: 问题答案: 发现在网络上的答案在这里。 基本上,假设我们要运行以下查询: 我们可以这样传递“ start_date”和“ end_date”:

    • 我正在使用注释处理来生成一些类...我有两个模块,处理器本身和使用它的“客户端”模块。我想通过客户端向处理器传递一个参数,我可以这样做 如何在处理器端检索此参数?

    • 我正在尝试从使用自由式詹金斯构建切换到管道项目。 我喜欢它的许多方面,但我希望我可以使用多分支管道,因为它更适合我们公司,但目前这不是一个选择。 我们目前所做的是创建一个名为

    • 问题内容: 好吧,我需要在我的Hudson Job中执行一个批处理文件,我有一个参数(Jenkis参数),我需要将此参数(如param)传递给批处理文件,我尝试了以下方法: 我的Deploy.cmd配置为获取此值,但Jenkis不分配值。例如,我有以下内容: 然后,批处理文件将使用此值 接受参数名称而不是其值 问题答案: 执行您的批处理文件,如下所示 如果您的Jenkins服务器在unix / L

    • 问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,