2014-01-13 9 views
0

У меня есть каталог, полный XML-архивов. Что-то вроде 400 XML, и мне нужно переименовать каждый из них с данными, которые присутствуют на них, используя VBScript.Переименование нескольких XML-файлов с использованием VBScript

Я сделал некоторый код, что функции, но все еще есть проблемы:

@EDIT -> решена. Я нашел функцию «Заменить». Спасибо, Эккехард!

  • Некоторые из значений в узлах, которые я использую для переименования файла имеют недопустимые символы („/“, более точно), что делает VBScript не смог спасти его, возвращая „Путь не найден“. Как я могу изменить каждый «/» (если они существуют в настоящем Operadora, который предполагается в переменной) для каждого значения «Operadora», прежде чем использовать его для переименования файла? Я бы изменил его на «-».

Вот код:

Dim Caminho 
Dim FSO 
Dim FLD 
Dim fil 
Dim nomeErrado 
Dim nomeCerto 
Dim xmlDoc 
Dim OrganisationInfo, Operadora, recentDate, resultOperadora 

Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 'Msxml2.DOMDocument/Microsoft.XMLDOM 
xmlDoc.Async = "False" 
xmlDoc.setProperty "SelectionLanguage", "XPath" 

Caminho = "C:\Users\f8057612\Desktop\Bancos\Script_Operadoras" 

Set FSO = CreateObject("Scripting.FileSystemObject")  'Create the instance of the FSO 
Set FLD = FSO.GetFolder(Caminho)       'Set the folder you want to search. NOTE - some antivirus may not like this 

For Each fil in FLD.Files 
    If LCase(FSO.GetExtensionName(fil)) = "xml" Then 
     xmlDoc.Load fil.Path 
     nomeErrado = fil.Path 

     If xmlDoc.ParseError = 0 Then 

      For Each OrganisationInfo In xmlDoc.SelectNodes("//OrganisationInfo/OrganisationName") 
       Operadora = OrganisationInfo.Text 
      Next 

      resultOperadora = Replace(Operadora, "/", "-") 

      nomeCerto = "IR21 - " & resultOperadora & " - " & ".xml" 
      WScript.Echo "_" & nomeErrado & "_" & vbNewLine & "_" & nomeCerto & "_" 

      FSO.MoveFile nomeErrado, nomeCerto 

     End If 
    End If 
Next 

Set FLD = Nothing 
Set FSO = Nothing 
+0

Строка 32, кажется, «End If». Можете ли вы пометить линию, пожалуйста? –

ответ

2

В следующий раз, пожалуйста, определить проблемы/ошибки не-двусмысленно: Номер ошибки Ошибка Описание, строка (не по количеству, но, ссылаясь на источник).

Если 32 является правильным номер строки, а затем

FSO.MoveFile nomeErrado, nomeCerto 

виноват. Самая большая причина: файл с именем nomeCerto уже существует. Одним из способов может быть: Проверьте, существует ли целевой файл, если да, добавьте номер в имя. Другое: проверьте, не терпит ли ваш XPath (и Operadora «повторно используется»), если так регистрировать факт и не переименовывать файл.

Update:

Я пытался прийти со сценарием, вызывая .MoveFile бросить «путь не найдена ошибка». Когда вы перебираете коллекцию .Files и используете файлы .Path для указания источника .MoveFile, трудно понять, как не удается найти исходный путь. То же самое относится к целевому пути: независимо от того, укажете ли вы или по умолчанию FSO, куда перемещать файл, - если действие выполняется для некоторых файлов, наверняка следует найти путь к неприятным местам назначения.

Моим первым шагом было бы получить список некоторых последующих и некорректных (исходных) файлов. Существуют ли очевидные особенности плохих - например, забавные буквы (-> кодирование) или атрибуты (-> разрешения)?

Затем я бы отображал содержимое переменной nomeCerto (для неприятных файлов) с использованием MsgBox и разделителей - например.

MsgBox "|" & nomeCerto & "|" 

Возможно Operadora содержит материал (пробелы, \, /, использовать собственное воображение), что делает nomeCerto незаконным.

+0

Я отредактировал мой пост, извините, что забыл об этом. Это ошибка «path not found»:/ –

+0

Я тестирую его здесь. В каталоге нет такого файла с именем «nomeCerto». Я не могу понять, что вы подразумеваете под «проверкой, не терпит ли ваш XPath (и« Operadora »используется повторно), если так регистрировать факт и не переименовывать файл». ... Я должен использовать «nomeCerto =», IR21 - «& Operadora &».xml "" с полным путем? –

+0

Я не могу найти шаблон, чтобы понять, почему он иногда работает. Он переименовал некоторые файлы, не переименовал некоторые и не представил ошибку «Path not found», теперь –

0

Измените вашу строку файла перемещения на это;

FSO.moveFile nomeErrado & "/" & fil.Name, nomeErrado & "/" & nomeCerto 
+0

«nomeErrado» - это полный путь, поэтому добавление имени файла снова не поможет. –

+0

По-прежнему та же проблема ... Путь не найден:/ –

+0

попробуйте добавить wscript.echo к каждому из имен пути, чтобы узнать, являются ли они тем, что вы ожидаете. –

Смежные вопросы