使用 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

VBScripts and UAC elevation(visa以后的系统)

linux文本格式转换

dos2unix命令找不到怎么办

如何根据某些搜索模式在 unix 中为文本文件着色?

Linux常用操作命令

Linux常用操作命令