嗨,所以我一直在研究这一段时间,我尝试过的任何事都没有奏效。原谅我再问这个问题,但是我无法用powershell中的空格替换新行
$path = "$root\$filename"
Get-Content $path | % $_.Replace "`r`n"," " | Set-Content "$root\bob.txt" -Force
这是我在本网站上试图浏览的众多内容之一。
我正在使用powershell v3
答案 0 :(得分:4)
Keith Hill's helpful answer很好地解释了您的代码问题并提供了可行的解决方案。
但是,Keith的解决方案在输出行添加了一个尾随空格(正如您自己的解决方案尝试所做的那样,如果它有效)。
这是一个更简单的替代方案,可以避免这个问题。
(Get-Content $path) -join ' ' | Set-Content -Force $root\bob.txt
(Get-Content $path)
返回数组行请注意,这个和Keith的回答都需要将整个输入文件读入内存,这对于大文件可能会有问题。
答案 1 :(得分:3)
这里有几个问题。首先,您调用Get-Content的方式,从管道发送的字符串将永远不会有换行符。这是因为Get-Content的默认方式是在换行符上拆分文件并为每一行输出一个字符串。其次,你的Foreach命令需要{}围绕replace命令。试试这个:
Get-Content $path -Raw | Foreach {$_ -replace "`r`n",' ' |
Set-Content $root\bob.txt -Force
-Raw
参数指示Get-Content
以单个字符串的形式读取文件内容。这将保留CRLFs
。
答案 2 :(得分:3)
假设您没有将$OFS
更改为其默认值' '
(单个空格):
[string](Get-Content $path) | Set-Content -Force $root\bob.txt
或
"$(Get-Content $path)" | Set-Content -Force $root\bob.txt
$OFS
是一个自动变量,它在分隔符中指定将用于分隔数组的元素,并将其强制转换为[string]
。它的默认值是一个空格,Get-Content
将返回文件中的行数组,删除CRLF。将其转换为[string]
然后在文件中生成以空格分隔的行字符串。
答案 3 :(得分:0)
尝试一下:
$NewStr = "";
Get-Content $Path -Raw | ForEach {$NewStr += "$_ "}
$NewStr | Set-Content DestinationPath -Force