生成bat内容:
@echo off
d:
cd d:\UGS\ClearanceDB_Work_Area
echo y | delete_product.pl T21
pause
exit
@echo on
执行语句如下:
String cmd = "cmd /c start d: \delete_bat.bat" ;
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(cmd);
疑问:
我用java执行bat时,传入的Y没有起作用。但是我直接双击bat时却执行成功了。请问这是什么原因?解决办法是什么?或者有没有其他的方法可以实现类似答复命令提示的功能?
在你的 .bat 文件中,'echo y' 命令用于向控制台输出一个 'y' 字符。当你双击运行 .bat 文件时,这个 'y' 字符会被当作 'delete_product.pl' 程序的输入,因此会执行 'delete_product.pl T21' 命令。
然而,当你用 Java 程序运行 .bat 文件时,'echo y' 命令的输出会被打印到控制台中,但是不会作为 'delete_product.pl' 程序的输入。因此,这个命令就无法正常工作。
要解决这个问题,你可以使用 Java 的 ProcessBuilder 类来运行 .bat 文件,并通过向 'delete_product.pl' 程序的标准输入流写入 'y' 字符的方式来模拟在命令行中输入 'y' 的行为。
下面是一个例子:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "d:\\delete_bat.bat");
Process p = pb.start();
OutputStream os = p.getOutputStream();
os.write('y');
os.flush();
os.close();
p.waitFor();
在这个例子中,我们通过调用 ProcessBuilder 的 'start' 方法来创建并运行 .bat 文件。然后我们使用 'getOutputStream' 方法获取 'delete_product.pl' 程序的标准输入流,并向其写入 'y' 字符。最后,我们调用 'waitFor' 方法等待 .bat 文件执行完毕。