从文件中删除所有回车符和换行符

时间:2016-12-19 23:12:51

标签: powershell batch-file replace

上周我曾要求你们用.bat脚本替换带换行符的字符串。我已经意识到我的文件已经有一些回车符和换行符,我需要首先删除然后再进行替换。  取代### @ ###'使用换行符我使用下面的行。

(gc $Source) -replace "#@#@#", "`r`n"|set-content $Destination

所以我尝试实现相同的逻辑来替换\ r和\ n,但它没有用。

(gc $Source) -replace "`n", ""|set-content $Destination

我的文件如下:

abc|d  ef|123#@#@#xyz|tuv|567#@#@#

我需要让它看起来像

abc|def|123  xyz|tuv|567
像我说的那样,用新行替换行分隔符字符,但我需要先删除所有cr和lf字符。

对于小文件,下面的脚本可以正常工作,但是我的文件大于1.5GB并且它会抛出OutofMemoryException错误

param
(
  [string]$Source,
  [string]$Destination
)

echo $Source
echo $Destination

$Writer = New-Object IO.StreamWriter $Destination
$Writer.Write( [String]::Join("", $(Get-Content $Source)) )
$Writer.Close()

2 个答案:

答案 0 :(得分:0)

这是vbscript。 Windows不一致。主要是它打破CR并删除LF(所有内置编程语言)。但编辑控件(即记事本)在LF上中断并忽略CR(除非在LF之前)。

Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Do Until Inp.AtEndOfStream
    Text = Inp.readall
    Text = Replace(Text, vbcr, "")
    Text = Replace(Text, vblf, "")
    Text = Replace(Text, "#@#@#", vblf)
    outp.write Text
Loop

这使用了StdIn和StdOut的重定向。

过滤命令的输出

YourProgram | Cscript //nologo script.vbs > OutputFile.txt

过滤文件

Cscript //nologo script.vbs < InputFile.txt > OutputFile.txt

请参阅我的CMD备忘单,了解Windows的命令行Command to run a .bat file

因此,这将删除以win.ini结尾的行,并打印以显示现在的一行win.ini。

cscript //nologo "C:\Users\David Candy\Desktop\Replace.vbs" < C:\windows\win.ini

答案 1 :(得分:0)

使用以下功能删除特殊字符。将所有这些内容放在 $ SpecChars 中您要移除的内容,并使用文本数据作为参数调用该函数。

Function Convert-ToFriendlyName
{param ($Text)
# Unwanted characters (includes spaces and '-') converted to a regex:
#Whatever characters you want to remove, put it here with comma separation.
$SpecChars =  '\', ' ','\\','-'
$remspecchars = [string]::join('|', ($SpecChars | % {[regex]::escape($_)}))
# Convert the text given to correct naming format (Uppercase)
$name = (Get-Culture).textinfo.totitlecase(“$Text”.tolower())
# Remove unwanted characters
$name = $name -replace $remspecchars, ""
$name
}

希望它有所帮助...... !!!