Непечатные символы в именах файлов нарушают мой рекурсивный список файлов VB Script
Я создал скрипт 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 ответ
Создайте выходной текстовый файл как 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)