当我尝试从java运行批处理文件时,我得到“挖掘不被识别为内部或外部命令”

import java.io.*; public class Main { public static void main(String[] args) throws IOException, StringIndexOutOfBoundsException { Runtime.getRuntime().exec("cmd /c start C:\\dig-files3\\query3.bat"); } } 

我正在尝试通过java程序启动批处理文件,但是我在cmd屏幕中得到了“挖掘不被识别为内部或外部命令…”消息。 但是,当我双击窗口中的批处理文件时,它运行正常。 我怎样才能解决这个问题? 这是批处理文件的内容:

 SET /a VAR=0 :HOME SET /a VAR=VAR+1 IF %VAR%==200000 goto :End dig @10.3.1.166 6.4.0.3.5.5.5.9.9.9.com. naptr goto :HOME :END 

这可能是因为“挖掘”尚未添加到您的PATH变量中。 尝试打开一个新的终端窗口并输入“dig”,它可能会显示相同的错误。 您必须转到控制面板 – >系统 – >系统属性 – >高级选项选项卡 – >环境变量。

在那里你必须搜索PATH变量并在最后(并在向最后一个命令添加“;”之后)添加“挖掘”可执行文件的完整路径(可执行文件本身除外,例如c:\ foo \ bar)。 然后再试一次。 对于您尝试运行的可执行文件,此环境变量告诉Windows查看其中包含的路径列表。

另一个解决方案是将已编译的java文件复制到dig可执行文件所在的位置并从那里运行它。

您应该为工作目录创建一个文件对象,以防止路径中的空格出现问题,然后使用该对象启动批处理脚本:

 File workdir = new File("C:\\dig-files3"); Runtime.getRuntime().exec("query3.bat", null, workdir); 

您的批处理脚本中还存在一个缺陷:您可能希望编写SET /a VAR=%VAR%+1以便在递增之前评估%VAR%

您的问题是您没有系统PATH变量中的批处理文件。 将批处理文件的路径插入到系统PATH中,它应该可以正常工作

好吧,还有另一种方法可以解决这个问题,但这就是我做到的。 我正在使用Eclipse,我将dig应用程序复制到项目目录C:\ User \ username \ workspace \ projectName