Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么用.bat编写的命令在java中无限运行?_Java_Batch File_Cmd - Fatal编程技术网

为什么用.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 remove
cmd/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应用程序?