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

Powershell 从文件中删除所有回车符和换行符,powershell,batch-file,replace,Powershell,Batch File,Replace,上周我要求你们用换行符替换字符串,用.bat脚本。我已经意识到我的文件已经有了一些回车符和换行符,我需要先删除它们,然后再进行替换。 要用linefeed替换“#@#@#”我使用下面的行 (gc $Source) -replace "#@#@#", "`r`n"|set-content $Destination 因此,我尝试实现相同的逻辑来替换\r和\n,但是它不起作用 (gc $Source) -replace "`n", ""|set-content $Destination 我的文件看

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

(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()

这是vbscript。Windows不一致。大多数情况下,它在CR上中断并删除LF(所有内置编程语言)。但编辑控件(即记事本)在LF上中断并忽略CR(除非在LF之前)

这将使用StdIn和StdOut的重定向

过滤命令的输出

YourProgram | Cscript //nologo script.vbs > OutputFile.txt
筛选文件

Cscript //nologo script.vbs < InputFile.txt > OutputFile.txt
Cscript//nologo script.vbsOutputFile.txt
请参阅有关Windows命令行的my CMD备忘单

因此,这将删除以win.ini结尾的行,并打印到现在的一行win.ini屏幕上

cscript //nologo "C:\Users\David Candy\Desktop\Replace.vbs" < C:\windows\win.ini
cscript//nologo“C:\Users\David Candy\Desktop\Replace.vbs”
这是vbscript。Windows不一致。大多数情况下,它在CR上中断并删除LF(所有内置编程语言)。但编辑控件(即记事本)在LF上中断并忽略CR(除非在LF之前)

这将使用StdIn和StdOut的重定向

过滤命令的输出

YourProgram | Cscript //nologo script.vbs > OutputFile.txt
筛选文件

Cscript //nologo script.vbs < InputFile.txt > OutputFile.txt
Cscript//nologo script.vbsOutputFile.txt
请参阅有关Windows命令行的my CMD备忘单

因此,这将删除以win.ini结尾的行,并打印到现在的一行win.ini屏幕上

cscript //nologo "C:\Users\David Candy\Desktop\Replace.vbs" < C:\windows\win.ini
cscript//nologo“C:\Users\David Candy\Desktop\Replace.vbs”
使用以下功能删除特殊字符。将它们全部放入$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
}

希望对你有帮助

使用下面的函数删除特殊字符。将它们全部放入$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
}


希望对你有帮助

我相信它不是重复的,因为我正在尝试删除所有\r和\n。不是组合。另外,我只想将它们替换为空格。因此,您正在尝试删除
\r
\n
,但保留
\r\n
?不,我正在尝试删除所有\r\n。文件不应具有换行符,因为“#@#@#”是行尾字符串。话虽如此,我是否将行分隔符设置为#@##@然后在powershell中逐行读取以删除\r\n字符?当您说要删除所有\r和\n而不是组合时,您把我弄糊涂了。我不知道是否可以在PowerShell中使用大于单个字符的分隔符。我的想法是将文件转换为十六进制,删除
0d
0a
的任何实例,然后转换回ASCII。考虑到它是一个大文件,转换文件并删除不需要的字符是否高效?对于这种转换,您建议使用什么脚本?它必须是自动的。我相信它不会重复,因为我正在尝试删除所有\r和\n。不是组合。另外,我只想将它们替换为空格。因此,您正在尝试删除
\r
\n
,但保留
\r\n
?不,我正在尝试删除所有\r\n。文件不应具有换行符,因为“#@#@#”是行尾字符串。话虽如此,我是否将行分隔符设置为#@##@然后在powershell中逐行读取以删除\r\n字符?当您说要删除所有\r和\n而不是组合时,您把我弄糊涂了。我不知道是否可以在PowerShell中使用大于单个字符的分隔符。我的想法是将文件转换为十六进制,删除
0d
0a
的任何实例,然后转换回ASCII。考虑到它是一个大文件,转换文件并删除不需要的字符是否高效?对于这种转换,你会推荐什么脚本?它必须是自动化的,谢谢。当我们说“直到”时,它会一行一行地循环吗?当我们说“直到”时,它会一行一行地循环吗?我的文件很大,只有很少的回车换行字符。这个循环如何读取文件?当我们说Do Until Inp.AtEndOfStream时,它是什么意思?它曾经是,但我将它改为
readall
,从而使
Do。。。循环
不必要(循环一次)。在replace语句中的
之间放置一个空格,以替换为空格,而不仅仅是删除。因此,您可以逐行阅读并
text=text&out.readline
,然后在循环外进行写操作。对不起,我以前没有使用过任何vb脚本。我的源代码和tergat在哪里?它是命令行而不是vbscript。我的回答中有一些例子。谢谢你。当我们说“直到”时,它会一行一行地循环吗?当我们说“直到”时,它会一行一行地循环吗?我的文件很大,只有很少的回车换行字符。这个循环如何读取文件?当我们说Do Until Inp.AtEndOfStream时,它是什么意思?它曾经是,但我将它改为
readall
,从而使
Do。。。循环
不必要(循环一次)。在replace语句中的
之间放置一个空格,以替换为空格,而不仅仅是删除。因此,您可以逐行阅读并执行以下操作