Сохранение файла в другой файл с использованием VBScript после модификации - PullRequest
0 голосов
/ 08 июля 2019

У меня есть несколько файлов XML в папке \\demo.US\Modified\.Файлы в папке:

USA.xml
Canada.xml
Mexico.xml

Приведенный ниже код изменяет кодировку с UTF-8 на windows-1252 и создает измененный файл mod.xml.

This mod.xml В файле содержатся данные из всех трех XML-файлов, соединенных.

Мне нужна помощь, чтобы я мог сохранять файлы отдельно.

Если значение objFile.Name равно USA.xml, тогда следует сохранить измененное имя файлакак USA_mod.xml.вывод для папки \\demo.US\Modified\ после завершения должен содержать файлы модов, как показано ниже.

USA.xml
Canada.xml
Mexico.xml
USA_mod.xml
Canada_mod.xml
Mexico_mod.xml

Я использовал следующий код:

Set objFSO = CreateObject("Scripting.FileSystemObject")

objStartFolder = "\\demo.US\Modified\"
Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files

For Each objFile In colFiles
    WScript.Echo objFile.Name

    Set objFile = objFSO.OpenTextFile(objStartFolder & objFile.Name, 1)
    Set outFile = objFSO.OpenTextFile(objStartFolder & "mod.xml", 2, True)

    Do Until objFile.AtEndOfStream
        strContent = strContent & objFile.ReadLine
    Loop
    MsgBox strContent
    strContent = Replace(strContent, "encoding=""UTF-8""", "encoding=""windows-1252""")
    outFile.WriteLine strContent
    outFile.Close
    objFile.Close
Next

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Как уже отмечали другие, вам не следует делать то, что вы пытаетесь сделать здесь, потому что это очень может создать больше проблем в будущем. Найдите причину проблемы и устраните ее, не пытаясь справиться с симптомами. Вы были предупреждены.

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

Заменить эти строки:

Set objFile = objFSO.OpenTextFile(objStartFolder & objFile.Name, 1)
Set outFile = objFSO.OpenTextFile(objStartFolder & "mod.xml", 2, True)

с этим:

Set inFile = objFile.OpenAsTextStream
outFilename = objFSO.BuildPath(objStartFolder, objFSO.GetBaseName(objFile) & "_mod.xml")
Set outFile = objFSO.OpenTextFile(outFilename, 2, True)

, а также замените другие вхождения objFile после этого на inFile ( всегда избегайте изменения значения переменной цикла), и код должен делать то, что вы ожидаете. Но, опять же, имейте в виду, что вывод может быть недействительным XML.

0 голосов
/ 09 июля 2019

Мне удалось заставить это работать, ниже код, который я использовал

Dim objFSO, filePath, objFile, colFiles, s , FName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set filePath = objFSO.GetFolder("\\demo.US\Modified\")
Set colFiles = filePath.Files

For Each FName in colFiles

set objFile = objFSO.OpenTextFile(FName.Path,1)
set outFile = objFSO.OpenTextFile(LEFT(FName.Path,instr(FName.Path,".xml")-1) &"_mod.xml",2,True)

do until objFile.AtEndOfStream
strContent=objFile.ReadLine
Loop
strContent = Replace(strContent, "encoding=""UTF-8""", "encoding=""windows-1252""") 
outFile.WriteLine strContent
outFile.Close
objFile.Close  
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...