我使用以下代码执行.bat文件并阅读响应。
java.lang.ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "C:\\main.bat");
java.lang.Process p = pb.start();
String line;
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = r.readLine()) != null) {
System.out.println(line); <--this works
}
r.close();
}
}
main.bat只会回显值
call sample.bat c:\sample.txt value1
echo %value1% <---this works
但是现在我想从将在批处理文件中设置的java代码传递一个参数,并且可以在java代码中打印。
java.lang.ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "C:\\main.bat" +s1);
java.lang.Process p = pb.start();
System.out.println(s1); <--- this does not work
有人可以告诉我如何将.bat文件中的值返回给任何调用应用程序吗?
答案 0 :(得分:2)
请尝试使用以下代码
第1步:创建新的类CommandStreamReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
class CommandStreamReader extends Thread
{
InputStream is;
String type;
CommandStreamReader(InputStream is, String type)
{
this.is = is;
this.type = type;
}
public void run()
{
try
{
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
第2步:使用您的内容在C目录上创建main.bat文件,此处为例
回声santosh shinde第3步:创建新类CmdTest
public class CmdTest {
public static void main(String[] args) throws Exception {
try{
String[] cmd = new String[3];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = "C:/main.bat";
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0] + " " + cmd[1] + " " + cmd[2]);
Process proc = rt.exec(cmd);
// any error message?
CommandStreamReader errorStream = new CommandStreamReader(proc.getErrorStream(), "ERROR");
// any output? Here We take return or output value from bach file
CommandStreamReader outputStream = new CommandStreamReader(proc.getInputStream(), "OUTPUT");
// kick them off
errorStream.start();
outputStream.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch(Throwable t){
t.printStackTrace();
}
}
}
}
第4步:输出
Execing cmd.exe /C F:/main.bat
OUTPUT>
OUTPUT>C:\Users\Admin\workspace\BuilAPKAnt>echo santosh
OUTPUT>santosh shinde
ExitValue: 0
答案 1 :(得分:1)
exit /B 42 , there is a great batch file resource in http://ss64.com/nt/
答案 2 :(得分:0)
不是将s1附加到最后一个参数,而是将其作为第四个参数传递。这应该有用。
答案 3 :(得分:0)
您是否尝试过将变量用作参数,而不是将其连接到main.bat调用?
java.lang.ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "C:\\main.bat", s1);
然后在您的批处理文件中,例如:
echo %1
答案 4 :(得分:0)
正如Mena所建议的那样,使用您的变量作为参数然后使用%1
可以正常工作
注意:您不能在此%1 - %9
然后从批处理文件中检索变量到Java我相信你可以使用%ERRORVALUE%
作为退出代码
修改强>
这有点圆,但你也可以将Java分开,以便在传递参数之后 批处理文件使用它然后调用一个单独的java传递你想要使用的变量。