【问题标题】:How to write a batch file that automatically gives input to a java program that prompts for user input如何编写一个批处理文件,自动将输入提供给提示用户输入的java程序
【发布时间】:2020-12-14 16:03:32
【问题描述】:

我想编写一个批处理文件,它会自动将输入提供给提示用户输入的 java 程序。

到目前为止,我的代码如下:

set path=C:\Program Files\Java\jdk-13.0.2\bin

javac *.java

java myJavaProgram

问题是当 myJavaProgram 执行时它会提示用户输入,所以批处理文件等待我提供输入以便继续执行。我希望能够使用 .bat 自动传递输入。这可能吗?感谢您的帮助!

编辑:更新问题以包含更多上下文。

更详细地说,当从批处理文件执行myJavaProgram 时,它会提示用户从控制台输入并等待它。我必须给一个字符串。当我写字符串时,myJavaProgram 用扫描仪读取它并用它做一些事情(它做了什么并不重要)。然后它终止。我想更改批处理代码,以便在提示输入字符串时不需要编写字符串。我想在批处理文件中使用我的输入字符串设置一个变量,并将其作为输入提供给myJavaProgram“绕过”控制台。

【问题讨论】:

  • 一般来说: 1) 将参数传递给程序,例如批处理文件的路径。 2)给定参数的存在,使用参数来获取输入。例如,如果程序使用Scanner,则创建Scanner 以从参数表示的文件中读取(而不是从 System.In 中读取)。
  • 请不要使用那种语法,set path=location。它的作用是从用户环境变量%Path% 和系统环境变量%Path% 的变量值中删除每条字符串数据。然后它暂时将其全部替换为C:\Program Files\Java\jdk-13.0.2\bin(在我看来,无论如何应该是C:\Program Files\Java\jdk-13.0.2\bin;。这样做可能会更好,If "%Path:~-1%" == ";" (Set "Path=%Path%%ProgramFiles%\Java\jdk-13.0.2\bin;") Else Set "Path=%Path%;%ProgramFiles%\Java\jdk-13.0.2\bin;"
  • 另外,javac 在技术上不是正确的命令,因为它依赖于另一个变量。 %PATHEXT%,未修改。 %PATHEXT% 下的值数据是可执行扩展名的列表,依次添加这些扩展名,直到在当前目录中找到匹配的文件,如果未找到,则在 %Path% 中的每个文件匹配。为什么不避免该过程发生,并自己提供扩展。 javac.exe *.java。还请注意,您还应该使用 java.exe myClass 用于类文件(无.class 扩展名),或使用java.exe -jar myJar.jar 来运行 jar 文件。
  • @Compo 谢谢你的回答。你是对的,但这不是我要在这里解决的问题。不过我会使用你的建议。

标签: java batch-file


【解决方案1】:

我找到了解决方案。我首先使用> 运算符将命令提示符窗口中的echo 命令输出(字符串)重定向到文件temp.txt。文件temp.txt 现在包含我想作为输入提供给myJavaProgram 的字符串。然后我打开temp.txt 并使用< 运算符将输出作为myJavaProgram 的输入发送到命令提示符窗口。代码如下:

@echo off
If "%Path:~-1%" == ";" (Set "Path=%Path%%ProgramFiles%\Java\jdk-13.0.2\bin") Else Set "Path=%Path%;%ProgramFiles%\Java\jdk-13.0.2\bin"

javac.exe *.java

echo myString> temp.txt
java.exe myJavaProgram < temp.txt 

【讨论】:

    【解决方案2】:

    正如@Mofi 所建议的,更直接的解决方案是使用管道| 运算符,它将第一个命令(echo myString)的输出通过管道传输到第二个命令(java.exe myJavaProgram)的输入。

    @echo off
    If "%Path:~-1%" == ";" (Set "Path=%Path%%ProgramFiles%\Java\jdk-13.0.2\bin") Else Set "Path=%Path%;%ProgramFiles%\Java\jdk-13.0.2\bin"
    
    javac.exe *.java
    
    echo myString| java.exe myJavaProgram
    

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      相关资源
      最近更新 更多