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

Saving file into another file using VBScript after modification

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

USA.xml
Canada.xml
Mexico.xml

下面的代码将编码从 UTF-8 更改为 windows-1252 并创建了一个 mod 化文件 mod.xml.

这个 mod.xml 文件包含所有三个 XML 文件的数据。

我需要帮助才能单独保存文件。

如果 objFile.Name 的值为 USA.xml 那么它应该将 mod 化的文件名保存为 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

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

话虽如此,之所以将所有输入文件的内容写入同一个输出文件,是因为你总是指定同一个输出文件。但是,该文件应该只包含最后一个输入文件的内容,因为您打开文件是为了写入(从而擦除以前的内容)而不是为了追加。

替换这些行:

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)

并用 inFile 替换其他出现的 objFile始终 避免更改循环变量的值),以及代码应该做你期望它做的事。但再次警告,输出可能无效 XML.

我设法让它工作了,下面是我使用的代码

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