Command line 正在删除文件中的~\r\n字符

Command line 正在删除文件中的~\r\n字符,command-line,vbscript,command-line-arguments,Command Line,Vbscript,Command Line Arguments,我有以下文件,其中每一行都是用字符~\r\n创建的 我想删除所有出现的~\r\n并替换为“”(空字符串),以便所有文件数据都显示在一行上。为此,我在VBScript(replace.vbs)中编写了一个脚本,并在命令行中使用cscript replace.vbs“~\r\n”“”-第一个参数是要替换的原始字符,第二个参数是要写入文件的新文本 我的脚本可以成功地替换常规文本-例如,如果我只传递作为要替换的字符串,它将按预期工作。但我的问题是,当我传递完整的~\r\n时,它根本不会修改文件。我认为

我有以下文件,其中每一行都是用字符
~\r\n
创建的

我想删除所有出现的
~\r\n
并替换为“”(空字符串),以便所有文件数据都显示在一行上。为此,我在VBScript(replace.vbs)中编写了一个脚本,并在命令行中使用
cscript replace.vbs“~\r\n”“”
-第一个参数是要替换的原始字符,第二个参数是要写入文件的新文本

我的脚本可以成功地替换常规文本-例如,如果我只传递
作为要替换的字符串,它将按预期工作。但我的问题是,当我传递完整的
~\r\n
时,它根本不会修改文件。我认为这与
~\r\n
字符被错误地传递到命令中有关

以下是我的脚本:

Const ForReading = 1
Const ForWriting = 2

strOldText = Wscript.Arguments(0)
strNewText = Wscript.Arguments(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "D:\FTP\Private\EDI\KleinschmidtTemp\"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files
For Each objFile in colFiles
   if instr(objFile.Name,"BRO") <> 0 and instr(objFile.Name,".edi") <> 0 then
    Set objFileToRead = objFSO.OpenTextFile(objStartFolder + objFile.Name, ForReading)

    strText = objFileToRead.ReadAll
    objFileToRead.Close
    strNewText = Replace(strText, strOldText, strNewText)

    Set objFileToEdit = objFSO.OpenTextFile(objStartFolder + objFile.Name, ForWriting)
    objFileToEdit.WriteLine strNewText
    objFileToEdit.Close

    objFSO.MoveFile objStartFolder + objFile.Name, "D:\FTP\Private\EDI\Kleinschmidt\Outgoing\" + objFile.Name
   end if
Next
不过我还有一个问题。。。当我打开结果文件时,所有内容都在一行上,这正是我想要的。但是我的脚本没有删除文件末尾的
,因此有一个额外的空行。我怎样才能解决这个问题


您可以在记事本++中执行此操作,方法是打开“在替换中查找”对话框中的“扩展”搜索模式。将\r\n替换为\r\n

看起来您是在Windows的机器上执行此操作的,如果您的系统上有Cygwin或git bash,您也可以使用sed,例如:

sed -i sed 's/\r$//' input

如果不想就地编辑文件并测试结果,请排除-i标志。

我会尝试使用“~”&vbCrLF&”作为搜索。vbCrLf是新行回车组合的常量。

从命令行或批处理文件中执行此操作要容易得多。但由于您使用的是VBScript,因此需要执行以下操作

首先,去掉脚本参数。将控制字符传递给脚本参数对于正常工作来说是一场噩梦。相反,我们将把搜索硬编码到脚本中。如果您确实需要使用参数、注释来执行此操作,我将更新脚本以执行此操作,但它会变得更加混乱

Const ForReading=1
写入常数=2
'strOldText=Wscript.Arguments(0)
strOldText=“~”&vbCrLf&“
'strNewText=Wscript.Arguments(1)
strNewText=“”
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
objStartFolder=“D:\FTP\Private\EDI\KleinschmidtTemp”
设置objFolder=objFSO.GetFolder(objStartFolder)
设置colFiles=objFolder.Files
对于colFiles中的每个objFile
如果instr(objFile.Name,“BRO”)0和instr(objFile.Name,“.edi”)0,则
设置objFileToRead=objFSO.OpenTextFile(objStartFolder+objFile.Name,用于读取)
strText=objFileToRead.ReadAll
objFileToRead。关闭
strNewText=替换(strText、strOldText、strNewText)
设置objFileToEdit=objFSO.OpenTextFile(objStartFolder+objFile.Name,用于写入)
objFileToEdit.WriteLine strNewText
objFileToEdit.Close
objFSO.MoveFile objStartFolder+objFile.Name,“D:\FTP\Private\EDI\Kleinschmidt\outing\”+objFile.Name
如果结束
下一个
编辑

作为对编辑的响应,您将在回写文件时向文件中添加额外的行。您正在使用:

objFileToEdit.WriteLine
WriteLine
方法在字符串末尾追加一个新行字符。只需使用
Write

objFileToEdit.Write strNewText

谢谢你的帮助。我知道Notepad++中有这个替换功能,但我不想手动编辑所有文件。我想用我的脚本自动化这个过程,因为每天会有多个文件在不规则的时间。从示例文件判断,
只是文字文本,所以要替换
\r
\n
使用
vbCr
vbLf
vbCrLf
vbNewLine
。请看@user692942请看我的编辑,我发现
实际上不是纯文本。我不知道为什么我的问题被关闭,因为我刚刚编辑了它:(分别与
vbCr
vbLf
相同。您需要了解在VBScript中指定回车符和换行符的不同方法,因此出现了重复项,以及问题结束的原因。@user692942谢谢,我理解这一点,但在我的问题和您链接的问题中,这些方法似乎都不存在。)ot完全删除所有换行符。在我的情况下,最后一个换行符仍然存在。这正常吗?实际上应该是
“~”&vbCrLf&“
,但它需要在脚本文件中运行,因为您无法在命令行上传递
vbCrLf
,只有VBScript能理解它。谢谢您的回答。我想我以一种稍微不同的方式完成了您描述的操作。您是否介意查看我的编辑,看看您是否能提供帮助?我解决了大部分问题,但我仍然有一个smal我的问题…基本上只是拿了什么。@MERNboy我已经回复了你的编辑。@Nilpo谢谢,这就是我一直在寻找的解决方案!
objFileToEdit.Write strNewText