我正在尝试执行不在默认工作目录中的bat文件(来自java内)。我尝试了下面的代码,但它似乎不适用于“CD”命令。
String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
/////////////////////////////////////////////// ////////// 这是应该执行命令的代码 ////////////////////////////////////////////////// //////
String command = "cd C:\usmt" ;
//in windows
//String command = "ping -n 3 " + domainName;
String output = obj.executeCommand(command);
System.out.println(output);
答案 0 :(得分:1)
尝试这样的事情:
public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Program Files\\myfile.txt");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}
如果您尝试在没有CD的情况下执行此操作,请使用:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "C:\\Program Files\\myfile.txt");
答案 1 :(得分:0)
这取决于你想要完成的任务。如果你想让你的java程序有一个新的CWD,那么你将做一件事。如果你想执行一个子shell(正如另一个答案所假设的那样),你可以做那个答案所说的。
我会假设前者。每个Windows进程都有自己的CWD。如果您生成一个更改其CWD的进程,则生成进程不受影响。
用于更改进程'CWD的Win32 API为SetCurrentDirectory。我对Java知之甚少,我早就忘记了。也许java有一个在其实现中调用SetCurrentDirectory的API。或者,如果java具有类似.NET P / Invoke(托管代码调用非托管API的方式),则可以使用它。