2012-08-02 96 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