1、Runtime.getRuntime().exec("cmd /c start
C:\Program Files")時,會出錯
2、Runtime.getRuntime().exec("cmd /c mysql -uXXX -pXXX XXXXXX
<"+ filePath);備份數據庫時,含有空格路徑也會出問題;
So,怎么解決:
1、將路徑加 雙引號“”;這樣似乎可以解決第二類問題,
如:Runtime.getRuntime().exec("cmd /c mysql -uXXX -pXXX XXXXXX< \""+ filePath+"\"")
2、對於第一個問題:如果只加雙引號
Runtime.getRuntime().exec("cmd /c start \""+ filepath +"\"")
執行結果是:
只顯示一個DOS界面,標題欄是完整的filepath內容;
這個出現的原因大概是:
START命令的語法:
START:Start a specified program or command in a separate window.
Syntax:
START "title" [/Dpath] [options] "command" [parameters]
從語法看到,第一個字符串參數被當作新打開的CMD窗口的TITLE,所以前面直接在文件路徑加引號並沒有打開文件,而是只打開一個CMD窗口,可以注意到CMD窗口的標題正是文件的路徑名。
START:Start a specified program or command in a separate window.
Syntax:
START "title" [/Dpath] [options] "command" [parameters]
從語法看到,第一個字符串參數被當作新打開的CMD窗口的TITLE,所以前面直接在文件路徑加引號並沒有打開文件,而是只打開一個CMD窗口,可以注意到CMD窗口的標題正是文件的路徑名。
網絡上的解決辦法之一:使用START命令的/Dpath參數選項,如下:
String filepath = "\"F:\\My Documents\" K073.pdf";
Runtime.getRuntime().exec("cmd /c start /D"+filepath);
但是還是沒有解決之(針對我的問題);
String filepath = "\"F:\\My Documents\" K073.pdf";
Runtime.getRuntime().exec("cmd /c start /D"+filepath);
但是還是沒有解決之(針對我的問題);
3、我的解決方法:
start
后跟一對不包括任何內容的雙引號。
即:
Runtime.getRuntime().exec("cmd /c start "+"\""+"\" \""+ filepath+"\""); //再給start后面加一對引號
注意:filePath兩邊仍然加上引號,然后start之后加兩個"",這樣可以解決之;
即:
Runtime.getRuntime().exec("cmd /c start "+"\""+"\" \""+ filepath+"\""); //再給start后面加一對引號
注意:filePath兩邊仍然加上引號,然后start之后加兩個"",這樣可以解決之;
即:
Runtime.getRuntime().exec("cmd /c start \" \" \""+ filepath+"\"");
關於為什么,大概是:
start后面加一對空引號,意味着設置title參數為空,然后后面的filepath被正確解釋文件路徑了。