雖然以下的方法也可以解決,不過最簡單直接的,還是直接在路徑前后加雙引號-" ",這個方法簡單有效。
首先要說明的是mysqldump.exe在哪里不重要,重要的是要處理好路徑中的非法字符。
比如:我的mysqldump.exe的位置在本地的
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ui\WEB-INF\data\test
直接調用肯定是不行的,因為路徑中有空格。
解決方法是把空格換成
C:/Progra~1/Apache~1/Tomcat~1.0/webapps/ui/WEB-INF/data/mau
的樣子。
這里分兩種情況:
1、Program Files、Apache Software Foundation
類似這種的直接保留前六個字母,再加“~1”就行了
2、Tomcat 6.0 、tomcattomcat 6.0、tom 6.0、to 6.0
這個需要保留“.0”,最終換成Tomcat~1.0 、Tomcat~1.0 、tom6~1.0、to6~1.0
規律一看都能看明白。
最終處理結果如下:
C:/Progra~1/Apache~1/Tomcat~1.0/webapps/ui/WEB-INF/data/test/mysqldump.exe ...
其實以上就是所謂的DOS 8.3格式文件名規范。
所謂8.3格式短文件名規范,就是型如 PROGRA~1(目錄)或者元素周~1.exe(文件)這樣的名稱——
“8”是指文件名或目錄名的主體部分小於等於8個字節;
“3”是指文件名的擴展名部分小於等於3個字節。
另外還有一點,就是8.3文件名的有效字符不包括空格等特殊字符。
8.3短文件名格式規范是DOS+FAT12/FAT16時代遺留下的老規矩,自從Windows95開始(其實據說從Windows for Groups 3.11開始),Windows就已經能支持長文件名,但是為了向前兼容,特別是文件系統兼容性,FAT文件系統均強制執行“為長文件名提供8.3兼容格式的短文件名”的特性。
因此你會看到,在FAT16/32文件系統上:目錄"program files"同時還擁有一個8.3規范的"PROGRA~1"短名稱;而文件"元素周期表.exe"也同時擁有一個"元素周~1.exe"的短名稱。[這有一點像類UNIX系統下的hardlink,一個對象擁有兩個引用方式。]
PS:知道為什么IE瀏覽器的主程序叫做iexplore.exe 而不是iexplorer么?就是為了照顧8.3短文件名規范。
===================NTFS文件系統與8.3格式規范的兼容性===================
NTFS文件系統支持unicode(UTF16)字符集文件名,最長達255個UTF16字符,因此NTFS文件系統以及基於unicode字符集的32位NT內核Windows操作系統本身都沒有必要遵循16位DOS時代遺留的8.3格式短文件名規范。
但還是為了兼容性,NTFS文件系統也提供了一個可選的特性:8.3兼容格式。Windows中這個特性默認是on,也就是說每當建立一個長文件名的對象的同時,系統的NTFS驅動模塊會自動建立一個合適的8.3格式短名稱指向這個對象。
需要指出的是,這個特性並不像FAT文件系統中那樣是強制執行的,因此不同的磁盤實用程序或者操作系統可能有不同的執行方式——
比如windowsXP中可以用 fsutil behavior set disable8dot3 1 命令關閉,驅動模塊關閉這一特性后就不會每次都額外地建立一個附加的短名稱,這樣在新建/重命名大量小文件/目錄的時候能略微提升磁盤的寫入速度,(不用計算出一個合適的短文件名,也不用把這個額外的信息寫入磁盤)。
=================非win32標准的老程序兼容性依賴8.3規范=================
但是,關閉這一特性之后可能導致某些古老的應用程序出現兼容性問題,這些程序雖說是32位GUI界面的“windows應用程序”,卻不完全遵循win32程序的規范,而是通常混合有16位API,使用8.3格式短名稱來引用文件。很顯然,如果在一個NTFS分區上根本就不為長文件名提供短名稱,那么這些16/32位混合型老程序將無法用8.3格式短名稱來找到文件,當然會出錯……但是事情並不總是這么簡單的——
最近我發現有幾個老的應用程序不能正常啟動,這包括曾經在科大校園網上非常流行的科技大詞典(主程序 ncce_win.exe,怎么樣,熟悉不?)細查原因,似乎只是放在NTFS分區才會出問題,移到FAT32的U盤上沒問題。后來我驚訝的發現:把U盤格成NTFS再放上這個程序也沒問題!…… ……
數小時后,真正的的原因被找到了,說起來非常復雜,簡而言之:全路徑上有一級目錄不兼容短文件名格式,因此主程序找不到相關文件!
為什么會有一級目錄不兼容8.3規范呢?
因為我的硬盤是在以前的硬盤出故障后新換的,換上來之前,我在一個64位windows操作系統上把舊硬盤上還能讀出的目錄一一復制過來,而那個64位windows關閉了NTFS的8.3兼容特性,復制來的目錄和文件都不具備附加的短名稱,特別是我放應用程序的E:\program files\目錄。(64位windows理論上是完全不支持16位和16/32位混合程序的,因此可能默認就關閉了NTFS驅動的8.3兼容性,或者也許是什么優化程序關閉的。)
然后我用GHOST恢復了系統分區,恢復的32位winXP並沒有關閉8.3兼容性,但關鍵問題是已經寫入NTFS分區的(不具備短名稱的)目錄和文件並不會被這個32位XP重建短文件名,系統只會對新建的文件或目錄附加8.3文件名,至於原先已經建立好的目錄和文件,即使是重命名這種操作,也無法“提醒”XP檢查並追加上一個短文件名——這一點讓我百思不得其解。
於是,當我把軟件放在E:\program files\的子目錄中時,雖然子目錄“科技詞典”,以及ncce_win.exe等文件名都符合8.3規范,但是全路徑上有一個“program files”是不符合8.3規范的,並且沒有等效的短名稱代替,所以某個API就無法用“E:\progra~1\科技詞典\xxxxxxxx.xxx”定位文件了,這個程序當然無法正常啟動。
-----------------------與8.3兼容名稱相關的一些命令-----------------------
fsutil behavior query disable8dot3 檢查NTFS驅動是否開啟8.3兼容特性
fsutil behavior set disable8dot3 1 關閉8.3兼容特性
fsutil behavior set disable8dot3 0 開啟8.3兼容特性
fsutil file setshortname <longname> <8.3name> 手工指定一個8.3短名稱
dir /x 列出當前目錄的子目錄和文件,以及相應的8.3兼容名稱(如果有的話)
---------------------------------------------------------------------------------------------------------
Windows 關閉、開啟短文件名功能:
打開注冊表,找到:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
將 NtfsDisable8dot3NameCreation 的值設為 1,也就是不創建短文件名,具體含義如下:
0 NTFS creates short file names. This setting enables applications that cannot process long file names and computers that use different code pages to find the files.
1 NTFS does not create short file names. Although this setting increases file performance, applications that cannot process long file names and computers that use different code pages might not be able to find the files.
---------------------------------------------------------------------------------------------------------
具體說明在:http://technet.microsoft.com/en-us/library/cc959352.aspx
