修改后使用 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
我在文件夹 \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