2012-08-02 51 views
1

是否有一個函數,我可以使用該函數轉換不良文件名與良好的文件名?FileSystemObject - 不支持的文件名字符

我正在處理大量照片,並且偶爾我的腳本會停止,因爲上傳器已在文件名中放置了一個捲曲符號(〜)。我現在也想知道是否有任何其他不好的符號不能在文件名中,以及如何逃避它們。

我通過這些文件使用VBScript的文件系統對象循環,類似以下內容:

For Each File In Files 
    If InStr(UCase(File.Name), ".JPG") > 0 Then 
     '// do stuff 
    End If 
Next 
+2

我不完全相信你的錯誤是什麼,但'〜'是Windows文件名稱的有效字符。 – aphoria 2012-08-02 13:43:43

+0

您可能會想知道爲什麼會出現錯誤。由於原始文件名最有可能的來源也是來自某些基於Windows操作系統的文件,因此您很可能會收到無效字符。正如aphoria指出的那樣〜在Windows文件名中完全合法。在嘗試「修復」之前,您應該努力找出錯誤的真正原因。 – AnthonyWJones 2012-08-02 14:06:48

+0

你的錯誤是什麼? FileSystemObject與縮短的8.3命名約定一起使用。 – Nilpo 2012-08-02 15:49:54

回答

3

您可以將返回一個「乾淨」的文件名類似的功能:

function MakeNormal(filename) 
    dim re : Set re = new regexp 

    re.Pattern = "[^\w :\\\.]" 
    re.Global = True 

    MakeNormal = re.Replace(filename, "_") 

end function 

msgbox MakeNormal("C:\Temp\normal filename.txt") 
msgbox MakeNormal("C:\Temp\special [email protected]#$%^&*() filename.txt") 

' returns: "C:\Temp\normal filename.txt" and "C:\Temp\special __________ filename.txt" 

並用乾淨的文件替換文件的名稱。如果有兩個文件只在特殊字符上唯一,則會變得很危險。

以上是「白名單」的變體,如果你喜歡「黑名單」的版本,可以更換模式類似的東西[[email protected]#$%^&()]

+0

我不同意。您正在刪除允許以有效文件名顯示的字符。雖然有效,但這是一個不好的解決方案。 – Nilpo 2012-08-02 15:46:59

+0

@Nilpo,你有學術權利在你身邊。但根據我的經驗,您有時會遇到不符合[Windows文件名約定](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx)的系統,尤其是在ascii 127-255範圍。如果您的第三方上傳者無法使用某些符號,則必須回退以清理輸入內容。一種方法是用可接受的字符替換狡猾的字符。 – AutomatedChaos 2012-08-03 11:10:52

+0

我從來沒有見過FSO不會處理合法命名文件的單一實例。想想看 - 這會讓FSO變得毫無用處。在嘗試打開文件之前甚至無法重命名文件。這會造成其他問題的整體級聯效應。 – Nilpo 2012-08-03 12:52:23