文件名中的不可打印字符会破坏我列出VB脚本的递归文件

时间:2013-11-12 07:33:21

标签: recursion vbscript non-printable

我创建了一个VB脚本,以递归方式列出其所有文件和子文件夹文件。脚本开始正常,但最终在包含文件名中包含不可打印字符的文件的任何文件夹中崩溃,即当我在资源管理器中浏览文件夹时,我看到小方块。我不确定当找到包含此类字符的文件时,如何更改我的以下错误处理以继续。

任何建议或解决方案将不胜感激。谢谢。

Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolder = "C:\Input\"
Set objFolder = objFSO.GetFolder(strFolder)
Set NewFile = objFSO.CreateTextFile("C:\Output\" & objFolder.Name & " FileList.txt", True)
Set colFiles = objFolder.Files

On Error Resume Next

For Each objFile In colFiles
    NewFile.WriteLine(objFile.Path)
    If Err Then
        Err.Clear
    End If
Next

ShowSubFolders(objFolder)

Sub ShowSubFolders(objFolder)
    Set colFolders = objFolder.SubFolders

    For Each objSubFolder In colFolders
        Set colFiles = objSubFolder.Files
            For Each objFile In colFiles
                NewFile.WriteLine(objFile.Path)
                If Err Then
                    Err.Clear
                End If
            Next
        ShowSubFolders(objSubFolder)
    Next
End Sub

NewFile.Close

1 个答案:

答案 0 :(得分:1)

将输出文本文件创建为unicode,以便它可以处理“不可打印”字符。 CreateTextFile的第三个参数。

Set NewFile = objFSO.CreateTextFile(" ... ", True, True)

已编辑

如果无法使用unicode文件,则在写入输出文件之前,应将文件/文件夹名称从unicode转换为ansi。这将进行转换

Function Unicode2Ansi( text )
    Unicode2Ansi = text 
    With (WScript.CreateObject("ADODB.Stream"))
        ' Put data into stream
        .Type = 2 '( adTypeText )
        .Charset = "x-ansi"
        .Open
        .WriteText text
        'Retrieve data from stream
        .Position = 0
        Unicode2Ansi = .ReadText
        .Close
    End With 
End Function

并调整代码以将其命名为NewFile.WriteLine Unicode2Ansi(objFile.Path)