为什么用.bat编写的命令在java中无限运行?
我有一个为什么用.bat编写的命令在java中无限运行?,java,batch-file,cmd,Java,Batch File,Cmd,我有一个.bat文件,其任务是查找java版本。在bat文件中编写的命令是java-version(这只是一个示例,不要建议获得java版本的其他方法) 运行.bat文件的代码: String path = "cmd /c start d:\\java.bat"; Runtime rn = Runtime.getRuntime(); Process pr = rn.exec(path); bat文件正在运行,但在循环中运行。但预期的行为是,它应该打开命令提示符,只运行一次命令,而不是使用.b
.bat
文件,其任务是查找java版本。在bat文件中编写的命令是java-version
(这只是一个示例,不要建议获得java版本的其他方法)
运行.bat
文件的代码:
String path = "cmd /c start d:\\java.bat";
Runtime rn = Runtime.getRuntime();
Process pr = rn.exec(path);
bat文件正在运行,但在循环中运行。但预期的行为是,它应该打开命令提示符,只运行一次命令,而不是使用
.bat
文件检查java库
Version version = java.lang.Runtime.version();
System.out.println("Java Version = "+version);
System.out.println("Java Version Feature Element = "+version.feature());
System.out.println("Java Version Interim Element = "+version.interim());
System.out.println("Java Patch Element Version = "+version.patch());
System.out.println("Java Update Element Version = "+version.update());
System.out.println("Java Version Build = "+version.build().get());
System.out.println("Java Pre-Release Info = "+version.pre().orElse("NA"));
这里是因为文件名与其中的命令相同,所以
java.bat
文件本身是从java-version
命令调用的。只需重命名.bat
文件,或使用java.exe-version
即可解决此问题
由于这类可执行文件和批处理文件的扩展名是可选的(*),因此文件名本身可以单独用作命令,请阅读更多有关它的信息
(*)查看@Compo的深入评论
这里还有一个示例=) 我自己得到了答案。。 我们可以用下面的方式编写命令,而不是简单地在bat文件中编写命令,这对我很有用 调用java-version 谢谢,
Sudhansu批处理文件中的
java
命令运行java.bat
,因为在查找路径之前,它首先在当前目录中查找.exe
或.cmd
或.bat
。重命名批处理文件findJavaVersion.bat
,然后它就会工作。我刚才给出了一个例子。它适用于所有commands@KlitosKyriacou:重命名bat文件后,它对我不起作用name@mfsi_sudhansu名称更改后的行为是什么?它至少不应该调用自己,您还有其他问题吗?@mfsi_sudhansu removecmd/c start
部分,因为这会启动一个单独的子进程,所以只需保留d:\\java.bat
,因为这是一个单独的可执行文件,您就可以在java应用程序中获得完美的输出,使用cmd的过程没有巨大的开销;平台无关。以及稀有API jem的使用。该公式可能更好:“无需运行cmd.exe,因为java可以访问其运行时.version()
”或其他版本。这仅适用于java 9及以上版本。对于Java8及以下版本,请使用Java.version
系统属性。我认为这两种类型的答案都应该在这里可用!一些用户希望使用java库,那么这个答案将帮助他们!在给定的问题中,用户询问了关于java版本的.bat,但我想建议他,如果这个版本对您有用,您也可以使用它!从技术上讲,扩展名不是可选的,在当前目录中搜索文件java
,并在%PATHEXT%
下列出任何扩展名,例如.COM;。EXE;。蝙蝠;。CMD;。VBS;等…
并以相同的顺序从头到尾(在第一个找到时停止)。如果在当前目录中找不到任何位置,将搜索%PATH%
下列出的位置。这意味着当搜索行java-version
中的java
时,它会在当前目录中找到java.bat
。最快的修复方法可以是使用java.exe-version
或将名称更改为更唯一的名称。您的意思是只在命令行上执行java-version
?不运行Java应用程序?