一、遇到錯誤的情形
在用JS打開本地的文件(Microsoft Word)時,如果文件路徑帶有空格,那么winword命令會將路徑錯誤的解析。JS代碼如下:
1 var filePath = "D:/Biview/Corpus/生理學第七版/第一章 緒論.docx"; 2 var openDocObj = new ActiveXObject("WScript.Shell"); 3 openDocObj.Run("winword.exe " + filePath + "");
上面的代碼中變量“filePath”中的“第一章 緒論”字符串由於中間有一個空格,所以用winword命令將會導致路徑解析錯誤,最終就無法打開用戶指定正確路徑的文件。
二、嘗試解決方案
1、由於Windows把常用軟件的名稱和路徑記錄在注冊表里。打開Windows運行的開始菜單,單擊運行,輸入“winword D:/Biview/Corpus/生理學第七版/第一章 緒論.docx”。可以看到解析的錯誤路徑:
這個錯誤路徑是你的word的安裝文件路徑,所以你安裝的路徑不同,這個錯誤路徑也會不同。
2、記得在Java程序中獲取帶空格路徑的文件時,空格表示為“%20”,所以我也將空格替換為“%20”去嘗試,輸入“winword D:/Biview/Corpus/生理學第七版/第一章%20緒論.docx”,可以看到程序是沒有將“%20”轉義為空格:
3、經過不斷的嘗試發現給路徑加上引號可以正確的解析空格:
a、不加“\”和磁盤名,輸入:“winword "Biview/Corpus/生理學第七版/第一章 緒論.docx"”,默認尋找系統盤用戶文件夾下。
b、加“\”不加磁盤名,輸入:“winword \"Biview/Corpus/生理學第七版/第一章 緒論.docx"”,默認尋找安裝Microsoft Word的磁盤根目錄下。
c、加“\”不和磁盤名,輸入:“winword D:\"Biview/Corpus/生理學第七版/第一章 緒論.docx"”,默認尋找指定盤符的目錄下。
三、最終解決方案
//var filePath = "D:/Biview/Corpus/生理學第七版/第一章 緒論.docx"; //改為: var filePath = "D:\\\"Biview/Corpus/生理學第七版/第一章 緒論.docx\"";
四、測試環境
操作系統:64位和32位window7
Word版本:Microsoft Word 2010
IE版本:IE9
五、總結
1、如果是帶空格路徑的txt文件在運行里輸入“notepad D:\Biview\Corpus\生理學第七版\第一章 緒論.txt”則可以正確打開。
2、“winword”命令之后其他參數
/m宏名:啟動Word后運行指定宏,並禁止運行AutoExec宏。
/n:啟動Word而不打開任何文檔。
/t(空格)文檔名:啟動Word后打開指定文檔作為模板。
/a:禁止啟動Word后加載項或載入共用模板,包括Normal。
但如果Word不能正常啟動,命令行的方式就會很有幫助,如果由於宏病毒導致不能啟動,則可以試試/m;如果是由於加載項所致,則可以試試/a。
Java技術交流、學習、討論,QQ群:67844123