我创建了一个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
答案 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)