使用 VBScripts 将文本文件 unix 行结尾替换为 Windows [重复]
Posted
技术标签:
【中文标题】使用 VBScripts 将文本文件 unix 行结尾替换为 Windows [重复]【英文标题】:replace text file unix line endings to windows by using VBScripts [duplicate] 【发布时间】:2021-09-11 03:23:58 【问题描述】:文本文件换行是/n。当我用记事本打开它时,它不显示新行。当我用记事本++打开它时它会显示新行。
我创建了一个 VBscript 来用 \n(unix 行尾) 中的 \r\n(Windows 行尾) 替换新行。
该脚本不适用于替换新的 lin。当我将文本从 AAA 替换为 BBB 时,它可以工作:
什么是替换新行的替换表达式? -谢谢
我可以使用 windows 命令行 CMD-seg 替换新行吗?
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("c:\Replace_Text.txt",ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "\n", "\r\n")
Set objFile = objFSO.OpenTextFile("c:\Replace_Text.txt",ForWriting)
objFile.WriteLine strNewText
objFile.Close
【问题讨论】:
这有帮助吗:vbCr = "\r"
, vbLf = "\n"
, vbCrLf = "\r\n"
?
顺便说一下,来自 [cmd] 或 [batch-file],如果您不介意将制表符替换为空格,则可以使用%SystemRoot%\System32\more.com "input.txt" 1>"output.txt"
,或者如果制表符很重要Type "input.txt" | %SystemRoot%\System32\find.exe /V "" 1>"output.txt"
.显然,在这两种情况下,这都不是行内替换,因此输出文件需要替换输入文件。
这是两个问题,你要么想在 VBScript 中执行此操作,要么使用批处理文件,而不是两者。无论哪种方式,它都是重复的,您不是第一个询问如何更正 Stack Overflow 上的 UNIX 行结尾的人。
【参考方案1】:
一个简单的例子vbscript,基于我最初的评论:
Option Explicit
Const ForReading = 1
Const ForWriting = 2
Dim strTargetFile, objFSO, strText, strNewText, objFile
strTargetFile = "C:\Replace_Text.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strTargetFile, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, vbLf, vbCrLf)
Set objFile = objFSO.OpenTextFile(strTargetFile, ForWriting)
objFile.WriteLine strNewText
objFile.Close
WScript.Quit
还有一个简单的例子batch-file,基于我的第二条评论:
@Echo Off
SetLocal EnableExtensions
Set "TargetFile=C:\Replace_Text.txt"
Set "TempFile=%TargetFile%.tmp"
Copy /Y "%TargetFile%" "%TempFile%"
Type "%TempFile%" | %SystemRoot%\System32\find.exe /V "" 1>"%TargetFile%"
If Not ErrorLevel 1 Del "%TempFile%"
【讨论】:
嗨康波,谢谢。有用。我接受它作为解决方案。 您好 Compo,我们可以更改同一文件夹中的多个文本文件,例如更改 c:\test 文件夹中的所有文本文件吗? 是的,你可以。您可以首先使用您已经定义的文件系统对象获取文件夹,例如Set objFolder = objFSO.GetFolder("C:\wherever")
,然后您可以枚举包含中的每个文件,例如使用For Each objFile In objFolder.Files
,执行您的替换,然后在您的WScript.Quit
命令之前使用Next
行。最好使用包含替换代码的Sub
,并在For Each
中调用Sub
。由于这是一个额外的问题,与您提交的问题无关,我将把它留给您整理。以上是关于使用 VBScripts 将文本文件 unix 行结尾替换为 Windows [重复]的主要内容,如果未能解决你的问题,请参考以下文章