更改目录并在同一命令提示符下运行批处理文件

时间:2009-02-13 02:31:30

标签: java

有没有办法在命令提示符下打开命令提示符并更改目录,并使用java在同一命令提示符中运行批处理文件。

我知道如何使用java打开命令提示符。 谢谢,

6 个答案:

答案 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”)