【发布时间】:2017-03-08 01:11:16
【问题描述】:
我在 Windows 8.1 操作系统下工作。在里面我有一个名为 test.bat 的 .bat 文件,它只是执行一个 echo 命令:
echo "123" > output.txt
每当我从命令行 (cmd.exe) 运行文件时,它都会创建一个名为 output.txt 的文本文件,其中写入“123”(我假设每次调用 .bat 时该文件都不存在为简单起见)。
.bat 每次我从命令行调用它时运行正常,但是当我尝试从 Java 源代码调用它时,.bat 不会执行,即使代码运行正常(或者看起来是,因为没有显示警告或错误代码)。
我的 Java 源代码如下:
import java.io.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) throws InterruptedException{
try
{
List<String> command_args = Arrays.asList("cmd.exe", null , " "test.
File dir = new File("C:\\Users\\Administrador\\workspace\\test\\src\\test");
String[] files = dir.list();
Runtime.getRuntime().exec("cmd /c test.bat", null, new File("C:\\Users\\Administrador\\workspace\\test\\src\\test"));
if( files.length == 0 )
{
System.out.println("Empty dir");
}
else
{
for( String f: files )
{
System.out.println(f);
}
}
ProcessBuilder pb = new ProcessBuilder( command_args );
pb.directory(dir);
Process proc = pb.start();
//int error = proc.waitFor();
}
catch( IOException ioe)
{
ioe.printStackTrace();
}
}
}
该文件名为 HelloWorld.java,位于路径 C:\Users\Administrador\workspace\test\src\test 内。 代码的某些行用于列出变量 dir 引用的目录的内容,该目录确实指向正确的目录,因为代码的输出显示了目录内的文件(HelloWorld.java 和 test.蝙蝠)。
如果我运行代码,它会正确打印目录内容并且似乎也执行了 100% 的代码,但是每次运行 Java 代码时都没有创建 output.txt 文件。我正在尝试两种不同的方法从 Java 运行 .bat,都使用 ProcessBuilder 和直接从运行时运行,但其中任何一种都没有得到预期的结果。
您知道是否可以从 Java 中完全运行这种 .bat,或者我是否需要为此使用特定的库?
提前致谢。
【问题讨论】:
-
如果您打开命令行并键入 cmd /c test.bat 是否有效?如果是这样,那么可能工作目录设置不正确,可以通过执行 dir 开始,看看它是否显示 test.bat
-
@TheresaForster 是的,它执行 .bat 文件。我还使用 Java 中 File 类的 list() 方法来列出我试图从中调用 .bat 的目录的所有内容。它按预期打印所有文件,因此我认为目录已正确设置。我当然可能是错的,但如何证明它超出了我目前的 Java 知识范围。
-
尝试运行 cmd /c 目录。什么节目?
-
它输出卷标、卷序列号并列出目录中的当前文件(HelloWorld.java 和 test.bat),以及两个文件在磁盘中的总字节数.
-
你为什么要运行
cmd?如果直接执行bat会发生什么?
标签: java windows batch-file cmd java-7