修改后使用VBScript将文件保存到另一个文件

时间:2019-07-08 17:50:12

标签: vbscript

我在文件夹\\demo.US\Modified\中有一些XML文件。文件夹中的文件为:

USA.xml
Canada.xml
Mexico.xml

以下代码将编码从UTF-8更改为Windows-1252,并创建了修改后的文件mod.xml

mod.xml文件具有来自所有三个XML文件的数据并置。

我需要帮助,因此可以分别保存文件。

如果objFile.Name的值为USA.xml,则应将修改后的文件名另存为USA_mod.xml。执行完成后,\\demo.US\Modified\文件夹的输出应包含以下mod文件。

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 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样,您不应该在这里做您想做的事情,因为它很可能在以后制造更多的问题。查找问题的原因并解决问题,而不是尝试处理症状。您已被警告。

话虽如此,所有输入文件的内容都写入同一输出文件的原因是,您始终指定相同的输出文件。不过,该文件应仅包含最后一个输入文件的内容,因为打开文件是为了写入(因此擦除了先前的内容),而不是附加文件。

替换这些行:

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。

答案 1 :(得分:0)

我设法使其正常工作,下面是我使用的代码

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