有没有办法在命令提示符下打开命令提示符并更改目录,并使用java在同一命令提示符中运行批处理文件。
我知道如何使用java打开命令提示符。 谢谢,
答案 0 :(得分:8)
您可以将CD和批处理文件编码为cmd.exe / K的值。从doco(cmd /?):
请注意,命令分隔符“&&”分隔的多个命令 如果被引号包围,则接受字符串。
例如:
cmd /C "CD C:\ && Dir"
cmd /C "CD C:\Windows && Dir"
cmd /C "CD C:\Windows && MySuperSuperBatchFile"
有关详细信息,请运行:
cmd /?
从命令行。
答案 1 :(得分:7)
警惕Java的执行官。如果批处理过程填充输出缓冲区,它可能会挂起,并导致其他奇怪的问题。
我建议你看看apache exec。特别是根据您的需要,您应该注意到Executor界面有setWorkingDirectory方法。
基本用法:
Executor exec = new DefaultExecutor();
exec.setWorkingDirectory(new File("C:\\My\\Dir\\"));
CommandLine cl = new CommandLine("mybatch.bat");
int exitvalue = exec.execute(cl);
答案 2 :(得分:2)
有两个java.lang.Runtime.exec()变体确实有dir参数,所以我假设你没有想到这个?
您可以编译以下C程序并作为包装程序执行,以启动您想要的任何目录中的任何程序。如果您使用带有Runtime.exec的String数组,您将避免所有问题的命令行解析/可移植性/正确引用参数。
我这里没有要测试的任何Windows机器,但是如果你将C程序编译成cdexe.exe,你应该可以使用它如下:
public class Main {
public static void main(String args[]) {
String[] s = { "c:\\some\\place\\cdexe.exe",
"c:\\start\\dir", "c:\\my\\batch\\file.bat", "arg1", "..." };
try {
java.lang.Runtime.getRuntime().exec(s);
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
我猜unistd.h可能在windows上不可用,但只能替换为包含execv原型的那个。
#include <stdio.h>
#include <unistd.h> // or hard code "int execv(const char *path, char *const argv[]);"
int main(int argc, char *argv[])
{
if (argc < 3) {
fprintf(stderr, "Error: Usage: %s <directory> <program> [arguments]\n", argv[0]);
return 1;
}
if (chdir(argv[1]) < 0) {
perror("Error");
fprintf(stderr, "chdir(%s) failed\n", argv[1]);
return 1;
}
argv[1] = argv[2];
execv(argv[1], &argv[2]); // use execvp if you want PATH to be searched
perror("Error");
fprintf(stderr, "execv returned\n");
return 0;
}
答案 3 :(得分:0)
由于愚蠢的平台独立性原因,Java很难做到:基本上如果你在没有分层目录的系统上运行java会怎么样?
有许多变通方法取决于您真正想要做的事情,但可能最简单的方法是使用最终命令运行
java.lang.Runtime.exec()
。
答案 4 :(得分:0)
获取环境var“comspec”然后执行exec %comspec%/ c start / d directory / b batchfile.bat
答案 5 :(得分:-1)
将批处理文件保留在“路径”中。您无需转到任何特定目录即可执行它。
(例如,您可以在Windows环境中的Autoexec.bat中输入“set path =%path%; C:.......... \ YourBatchFile.bat”)