2009-02-13 31 views

回答

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 /? 

從命令行。

+0

可我有例子爲 – user48094 2009-02-13 02:38:15

+0

非常有幫助!謝謝 – Maroun 2013-03-04 17:04:07

+0

剛剛救了我的一天:D – 2015-08-17 07:31:37

0

由於高平臺獨立性原因,Java很難做到這一點:基本上,如果您在沒有分層目錄的系統上運行java,該怎麼辦?

根據您真正想要做什麼,有很多解決方法,但最簡單的方法是使用 java.lang.Runtime.exec()運行最終命令。

-1

將批處理文件保存在「路徑」中。你可以執行它而不需要去任何特定的目錄。

(例如,你可以有一個進入 「設置path =%PATH%; C:.......... \ YourBatchFile.bat」 Autoexec.bat中在Windows環境)

0

GET環境VAR「COMSPEC」然後exec的 %COMSPEC%/℃啓動/ d目錄/ b batchfile.bat

1

一對夫婦的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; 
} 
7

要警惕Java的exec。如果批處理過程填充輸出緩衝區並導致其他奇怪的問題,它可能會掛起。我建議你看看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); 
相關問題