2013-11-12 10 views
0

Я создал сценарий VB, чтобы рекурсивно перечислить все файлы файлов и подпапок. Скрипт начинается нормально, но в конечном итоге сбой в любой папке, содержащей файл с непечатаемыми символами/s в именах файлов, то есть я вижу маленькие квадраты при просмотре папки в Проводнике. Я не уверен, как изменить мою нижнюю обработку ошибок, чтобы продолжить, когда найдет файл с такими символами.Непечатаемые символы в именах файлов ломают список рекурсивных файлов VB Script

Любые советы или решения будут оценены. Спасибо.

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

Я ничего не могу VB сказать (я не использую MS-Windows, только немногие люди здесь на SO сделать), но здесь это общий совет: кажется, что вы не знаете, какую кодировку вы фактически используете. Без этой информации вы копаете в темноте, так как вы не знаете, что ищете. Узнайте свою настройку, и если она изменяется или является постоянной от установки до установки. Только тогда, когда вы знаете, как символы кодируются внутри вашей установки, вы можете начать отладку. – arkascha

+0

Спасибо, ребята. Я пробую решение MC ND. Я удалил обработку ошибок и заметлю ошибку, если она появится снова. Кажется, это ошибка перевода Unicode-> ANSI. – user2836826

ответ

1

Создать выходной текстовый файл как unicode, чтобы он мог обрабатывать символы «непечатаемые». Третий параметр CreateTextFile.

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

EDITED

Если вы не можете работать с файлами Юникода, то имена файлов/папок должны быть преобразованы из Юникода в 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)

+0

Спасибо. Я запустил сценарий в одночасье и дам вам знать, как получится. – user2836826