Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
从Java运行时执行批处理文件时,本机DOS命令无法运行_Java_Batch File_Runtime_Exec_Runtime.exec - Fatal编程技术网

从Java运行时执行批处理文件时,本机DOS命令无法运行

从Java运行时执行批处理文件时,本机DOS命令无法运行,java,batch-file,runtime,exec,runtime.exec,Java,Batch File,Runtime,Exec,Runtime.exec,当我在DOS中直接执行批处理文件时,一切都按预期运行。 但是当我从Java运行时执行批处理文件时,它将只运行调用jar文件的命令(即调用JVM)。它不运行任何本机dos命令 一个问题是,我没有办法知道为什么会发生这种情况。我想知道这是否是权限问题,但我不知道。有人见过这个吗 使用的Java代码如下所示: Runtime.getRuntime().exec(“c:\targetFolder\myBatch.bat”);//(为简单起见,此处进行了编辑。) 批处理文件看起来像这样(注意我已经简化了

当我在DOS中直接执行批处理文件时,一切都按预期运行。 但是当我从Java运行时执行批处理文件时,它将只运行调用jar文件的命令(即调用JVM)。它不运行任何本机dos命令

一个问题是,我没有办法知道为什么会发生这种情况。我想知道这是否是权限问题,但我不知道。有人见过这个吗

使用的Java代码如下所示:

Runtime.getRuntime().exec(“c:\targetFolder\myBatch.bat”);//(为简单起见,此处进行了编辑。)
批处理文件看起来像这样(注意我已经简化了它):
myBatch.bat:

调用java myJar.jar等等---是
复制outputFile.out outputFile.bak---否
mkdir testDir---NO
调用java myJar.jar等等---是
打电话给别人。蝙蝠---不
---yes行运行良好,我看到了预期的结果
---no行不运行,但我不知道为什么b/c没有控制台告诉我

谢谢你的帮助!!
Mike

第二个java调用执行的事实表明,所有NO行仍在执行,只是没有显示任何输出。你有没有试过在via上打开echo

@呼应

在你的第一行

其次,您的问题可能是工作目录错误。像这样指定工作目录

Runtime.getRuntime().exec("c:\targetFolder\myBatch.bat",null,"c:\targetFolder"); 

第二个java调用执行的事实表明,所有NO行仍在执行,但没有显示任何输出。你有没有试过在via上打开echo

@呼应

在你的第一行

其次,您的问题可能是工作目录错误。像这样指定工作目录

Runtime.getRuntime().exec("c:\targetFolder\myBatch.bat",null,"c:\targetFolder"); 

您必须运行Windows命令处理器(shell),将批处理文件作为参数提供给它

Runtime.getRuntime().exec( "cmd.exe /C c:\\targetFolder\\myBatch.bat" );

您必须运行Windows命令处理器(shell),将批处理文件作为参数提供给它

Runtime.getRuntime().exec( "cmd.exe /C c:\\targetFolder\\myBatch.bat" );

你的回答比我快了几秒钟谢谢你的回应比赛!:)不幸的是,它并没有解决我最初的问题(尽管我很感激改进我调用批处理的方法)。玩过之后,我发现我可以调用本机DOS命令,但前提是它们不从特定文件夹读/写。我相信在上一次调用中,JVM以某种方式锁定了该文件夹,在该调用中,我在该文件夹上创建了一个文件对象以查看其内容。问题是我没有办法“解锁”它,文件类也没有“关闭”方法。有没有快速解决这个问题的方法?再次感谢!您不应该使用Runtime.exec(),而应该使用ProcessBuilder并从中检索stand error,以查看出了什么问题。例如,我会朝那边走;非常感谢!你的回答比我快了几秒钟谢谢你的回应比赛!:)不幸的是,它并没有解决我最初的问题(尽管我很感激改进我调用批处理的方法)。玩过之后,我发现我可以调用本机DOS命令,但前提是它们不从特定文件夹读/写。我相信在上一次调用中,JVM以某种方式锁定了该文件夹,在该调用中,我在该文件夹上创建了一个文件对象以查看其内容。问题是我没有办法“解锁”它,文件类也没有“关闭”方法。有没有快速解决这个问题的方法?再次感谢!您不应该使用Runtime.exec(),而应该使用ProcessBuilder并从中检索stand error,以查看出了什么问题。例如,我会朝那边走;非常感谢!